代码之家  ›  专栏  ›  技术社区  ›  s_h

如何使用带jquery矢量图的javascript设置会话

  •  0
  • s_h  · 技术社区  · 7 年前

    我用一个jquery矢量地图库命名 jqvmap . 有人知道用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]);
    

    我读到了,似乎会话不能从客户端更改,但可能有人知道使用Ajax的解决方案。 BRGDS。

    1 回复  |  直到 7 年前
        1
  •  1
  •   deblocker    7 年前

    嗯,我还没有完全理解你的应用程序的整个工作流程,但是如果你需要创建一个PHP 无cookie会话 ,您需要自己来回传递会话ID。这可以使用下面的ajax/php来完成。创建两个PHP页面:

    设置“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);
    ?>
    

    获取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}
        }
      });
    }
    

    fisrt,您应该将会话ID mySessionId 以下内容:

    setSession('AZ');
    

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

    getSession();
    

    此外,根据需要,还可以使用HTTP头将用户直接从 get_session.php 页。

    希望这有帮助。