【问题标题】:Session not updating until refresh会话直到刷新才更新
【发布时间】:2016-02-13 20:10:09
【问题描述】:

我正在尝试使用 AJAX 调用来更新会话变量,然后重定向并在下一页上获取该变量。我的问题是,一旦页面重定向,会话在我刷新之前不会更新。

我认为这可能与会话是首先加载的事实有关,但我找不到解决方法。这是我的相关代码:

输入页面

$.post('save.php', {data:$input})
    .done(function() {
        window.location.replace('result.php');
    }
);

保存.php

session_start();

// make sure previous value has been deleted
unset($_SESSION['word']);

$_SESSION['word'] = $_POST['word'];

结果.php

session_start();

$data = $_SESSION['word'];

print_r($data);

谢谢!

【问题讨论】:

  • 为什么用ajax做,用post和update session var做,然后用php重定向?
  • @skywalker 我刚刚发布了我的代码的简化版本(可能不聪明) - 我实际上是在尝试传递一个数组,而我在网页上没有
    元素。最后我使用 JSON.stringify() 和这个post function 来传递值。感谢您的帮助!

标签: php jquery ajax session


【解决方案1】:

我认为@skywalker 有一个很好的观点,但是如果你想像现在这样使用 ajax 来做到这一点:

在您保存sessionphp 文件中将其更改为

session_start();

// make sure previous value has been deleted // <--- not needed
unset($_SESSION['word']);

$_SESSION['word'] = $_POST['word']; 

session_write_close();  //<---------- Add this to close the session so that reading from the session will contain the new value.

解释一下:session 存储在服务器上的文件中。当您编辑会话时,文件被锁定以供写入,但不能用于读取。当服务器尚未将所有更改写入会话文件并且下一个 php 脚本尝试读取会话时,您将获得“旧”值。要强制服务器将所有更改写入会话,请在使用下一个脚本读取之前关闭会话以进行写入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2021-08-09
    • 2015-11-01
    • 1970-01-01
    • 2013-09-18
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多