【问题标题】:PHP session variable not persisting through AJAX callPHP会话变量不通过AJAX调用持久化
【发布时间】:2016-03-16 10:12:38
【问题描述】:

我想使用 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 页面将重新加载,但它会首先加载一个外部页面(称为 item.php),该页面解决了所有 php 会话内容。看起来像这样:

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

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

感谢任何和所有想法!

【问题讨论】:

    标签: javascript php jquery ajax session


    【解决方案1】:

    您正在发送报价:

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

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

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

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

    试试

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

    改为。

    【讨论】:

    • 工作得很好。谢谢
    猜你喜欢
    • 2015-09-09
    • 2014-07-28
    • 2012-09-16
    • 2015-08-16
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多