我想使用HTML链接来更改PHP中的会话变量。为此,我设置了一个HTML“ a”标签,该标签将调用如下所示的javascript函数:

function changeValue(name){
  data = "key='person'&value=" + _name;
  $.ajax({
      url: www_root + "/funcs.php?func=set_session_var",
      type: "post",
      data: data,
      success: function(data){
          console.log(data);
      }
  });
  }


然后,我有了funcs.php脚本,该脚本具有以下set_session_var函数:

function set_session_var(){
   session_start();
   $key= trim($_GET["key"]);
   $value= trim($_GET["value"]);
   $_SESSION[$key] = $value;
   session_write_close();
   echo $key;
}


然后,将重新加载原始的php / html页面,但它将首先加载一个解决了所有php会话问题的外部页面(称为item.php)。看起来像这样:

session_start()
$session_id = session_id();
$sc = $_SESSION['person'];


但是,尽管AJAX成功函数返回了正确的值,但$ sc变量始终显示为空。我已经检查了两个脚本的session_id,它们是相同的。我也尝试在item.php中设置会话变量,并且该变量仍然存在。只是当我使用funcs.php脚本设置会话变量时,它不会保存。

任何和所有的想法表示赞赏!

最佳答案

您正在发送报价:

data = "key='person'&value=" + _name;
            ^------^


这意味着您正在有效地做:

$_SESSION["'person'"] = $value;
           ^------^-


请注意,这些单引号已成为会话密钥名称的一部分。

尝试

data = "key=person&value=" + _name;
            ^----^--- no quotes


代替。

关于javascript - PHP session 变量无法通过AJAX调用持久化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34207598/

10-11 05:23
查看更多