如何使用 Javascript 和 Jquery Vector Map 设置会话
How can I set a Session using Javascript with Jquery Vector Map
我正在使用名称为 jqvmap 的 jQuery 矢量地图库。有人知道在 Javascript 中设置会话而不是设置 Cookie 的方法吗?:
我的代码:
function getCountryName(code) {
var path = JQVMap.maps["world_en"].paths[code];
return path && path.name;
}
var fromCountryCode = getCookie(cookieName) || "";
worldMap = jQuery('#vmap').vectorMap({
map: "world_en",
backgroundColor: '#FFCC28',
borderColor: '#818181',
scaleColors: ['#222222', '#ffffff'],
borderOpacity: 0.25,
color: '#2F3132',
hoverOpacity: 0.8,
multiSelectRegion: true,
selectedColor: '#FBB24B',
selectedRegions: '{{$flag}}',
//selectedRegions: [fromCountryCode],
enableZoom: true,
showTooltip: true,
onRegionClick: function(e, code, name) {
code == "AE" ||
code == "AF" ||
code == "AG" ||
code == "AL" ||
code == "AM" ||
code == "AO" ||
code == "AR" ||
code == "AT" ||
code == "AU" ||
etc...
code == "ZW"
$("#message").text("Your Country: " + name);
setCookie(cookieName, code, 600); // minutes
window.location.replace("https://example.com/");
}
});
我的想法是在 Javascript 中设置 Session 而不是通过替换以下部分代码来设置 Cookie:
setCookie(cookieName, code, 600);
替换为
session(['name' => $code]);
我读到 SO,似乎无法从客户端更改会话,但可能有人知道使用 AJAX 的解决方法。
brgds.
好吧,TBH 我还没有完全理解你的应用程序的整个工作流程,但是如果你需要创建一个 PHP cookie-less session,你需要自己来回传递session id。这可以使用 ajax/php 来完成,如下所示。创建两个 PHP 页面:
set_session.php:
<?php
ini_set("session.use_cookies", 0);
ini_set("session.use_only_cookies", 0);
session_start();
if(isset($_POST['code'])){
$code = filter_var($_POST['code'], FILTER_SANITIZE_STRING);
}
$_SESSION['name'] = $code;
$_SESSION['value'] = 'https://example.com';
header('Content-Type: application/json');
$response = [];
$response['sessionid'] = session_id();
echo json_encode($response);
?>
get_session.php:
<?php
ini_set("session.use_cookies", 0);
ini_set("session.use_only_cookies", 0);
if(isset($_POST['sessionid'])){
$sessionid = filter_var($_POST['sessionid'], FILTER_SANITIZE_STRING);
}
session_id($sessionid);
session_start();
header('Content-Type: application/json');
$response = [];
$response['name'] = $_SESSION['name'];
$response['value'] = $_SESSION['value'];
echo json_encode($response);
?>
JavaScript:
var mySessionId = "";
function setSession (code){
$.ajax({url: 'set_session.php'
,data: {code: code}
,type: "post"
,dataType: "json"
,success: function (result) {
mySessionId = result.sessionid;
}
});
}
function getSession (){
$.ajax({url: 'get_session.php'
,data: {sessionid: mySessionId}
,type: "post"
,dataType: "json"
,success: function (result) {
// result will be: {name: AZ, value: https://example.com}
}
});
}
首先,你应该得到一个 session id 到 mySessionId
:
setSession('AZ');
然后,您可以稍后从您的 html 页面重用此 session id 以调用存储的 session 变量 server-side:
getSession();
此外,根据您的需要,您还可以使用 http header 将用户从 get_session.php
页面直接重定向到新的 link。
希望对您有所帮助。
我正在使用名称为 jqvmap 的 jQuery 矢量地图库。有人知道在 Javascript 中设置会话而不是设置 Cookie 的方法吗?:
我的代码:
function getCountryName(code) {
var path = JQVMap.maps["world_en"].paths[code];
return path && path.name;
}
var fromCountryCode = getCookie(cookieName) || "";
worldMap = jQuery('#vmap').vectorMap({
map: "world_en",
backgroundColor: '#FFCC28',
borderColor: '#818181',
scaleColors: ['#222222', '#ffffff'],
borderOpacity: 0.25,
color: '#2F3132',
hoverOpacity: 0.8,
multiSelectRegion: true,
selectedColor: '#FBB24B',
selectedRegions: '{{$flag}}',
//selectedRegions: [fromCountryCode],
enableZoom: true,
showTooltip: true,
onRegionClick: function(e, code, name) {
code == "AE" ||
code == "AF" ||
code == "AG" ||
code == "AL" ||
code == "AM" ||
code == "AO" ||
code == "AR" ||
code == "AT" ||
code == "AU" ||
etc...
code == "ZW"
$("#message").text("Your Country: " + name);
setCookie(cookieName, code, 600); // minutes
window.location.replace("https://example.com/");
}
});
我的想法是在 Javascript 中设置 Session 而不是通过替换以下部分代码来设置 Cookie:
setCookie(cookieName, code, 600);
替换为
session(['name' => $code]);
我读到 SO,似乎无法从客户端更改会话,但可能有人知道使用 AJAX 的解决方法。 brgds.
好吧,TBH 我还没有完全理解你的应用程序的整个工作流程,但是如果你需要创建一个 PHP cookie-less session,你需要自己来回传递session id。这可以使用 ajax/php 来完成,如下所示。创建两个 PHP 页面:
set_session.php:
<?php
ini_set("session.use_cookies", 0);
ini_set("session.use_only_cookies", 0);
session_start();
if(isset($_POST['code'])){
$code = filter_var($_POST['code'], FILTER_SANITIZE_STRING);
}
$_SESSION['name'] = $code;
$_SESSION['value'] = 'https://example.com';
header('Content-Type: application/json');
$response = [];
$response['sessionid'] = session_id();
echo json_encode($response);
?>
get_session.php:
<?php
ini_set("session.use_cookies", 0);
ini_set("session.use_only_cookies", 0);
if(isset($_POST['sessionid'])){
$sessionid = filter_var($_POST['sessionid'], FILTER_SANITIZE_STRING);
}
session_id($sessionid);
session_start();
header('Content-Type: application/json');
$response = [];
$response['name'] = $_SESSION['name'];
$response['value'] = $_SESSION['value'];
echo json_encode($response);
?>
JavaScript:
var mySessionId = "";
function setSession (code){
$.ajax({url: 'set_session.php'
,data: {code: code}
,type: "post"
,dataType: "json"
,success: function (result) {
mySessionId = result.sessionid;
}
});
}
function getSession (){
$.ajax({url: 'get_session.php'
,data: {sessionid: mySessionId}
,type: "post"
,dataType: "json"
,success: function (result) {
// result will be: {name: AZ, value: https://example.com}
}
});
}
首先,你应该得到一个 session id 到 mySessionId
:
setSession('AZ');
然后,您可以稍后从您的 html 页面重用此 session id 以调用存储的 session 变量 server-side:
getSession();
此外,根据您的需要,您还可以使用 http header 将用户从 get_session.php
页面直接重定向到新的 link。
希望对您有所帮助。