【问题标题】:How can I set a Session using Javascript with Jquery Vector Map如何使用带有 Jquery Vector Map 的 Javascript 设置会话
【发布时间】:2018-12-15 04:41:26
【问题描述】:

我正在使用一个名为 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 中设置会话,而不是通过替换以下代码部分来设置 Cookie:

setCookie(cookieName, code, 600);

替换为

session(['name' => $code]);

我阅读了 SO,似乎无法从客户端更改会话,但可能有人知道使用 AJAX 的解决方法。 brgds。

【问题讨论】:

  • 会话的标准方式是在客户端浏览器上设置一个cookie,所以恕我直言,这个问题有点过于宽泛,无法得到一个干净的答案。你检查过吗this关于会话存储的解释?
  • 谢谢@deblocker,我的系统正在使用cookies,但问题在于可以根据php.net/set_cookie在下一页加载时访问cookies,因此我无法使用它为新的客户在访问默认主页时立即

标签: javascript session cookies jqvmap


【解决方案1】:

好吧,TBH 我还没有完全了解您的应用程序的整个工作流程,但是如果您需要创建一个 PHP 无cookie 会话,您将需要来回传递会话 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}
    }
  });
}

首先,您应该在mySessionId 中获取会话ID:

setSession('AZ');

然后,您可以稍后从您的 html 页面重用此会话 ID 以调用存储在服务器端的会话变量:

getSession();

此外,根据您的需要,您还可以使用 http 标头将用户直接从 get_session.php 页面内重定向到新链接。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-04-27
    • 2016-03-15
    • 2013-08-04
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多