【问题标题】:PHP $_SESSION being saved, but cannot be retrieved without a time delayPHP $_SESSION 正在保存,但无法在没有时间延迟的情况下检索
【发布时间】:2011-10-26 09:11:02
【问题描述】:

首先,我试图在 SO 上找到答案,但找不到任何特定于我遇到的问题的内容。

现在,问题如下:

  1. 我用 AJAX 向服务器发送一个 JSON 字符串,一切都在同一个域,同一个服务器上
  2. 我解码 JSON 字符串,使用逗号作为分隔符将其分解,获取一个字符串作为返回并将该字符串保存到 $_SESSION 变量中
  3. 出于测试目的,我什至在设置 $_SESSION 变量后立即对其进行了print_r,我可以看到它正在设置中
  4. 当我尝试在不同的页面上使用该 $_SESSION 变量时,它不再存在。 $_SESSION 可以访问,但它只是那个不存在的变量。

这是最好的部分:

如果我在设置 $_SESSION 变量之前输入sleep(1) 或执行任何需要很长时间才能执行的操作,它会起作用

【问题讨论】:

  • 第二页调用session_start了吗?
  • 是的,我愿意。这就是我说 $_SESSION 可以在第二页上检索到的意思,但它不包含我设置的一个变量
  • 在第一页设置 $_SESSION 之后 session_write_close() 怎么样?
  • 我已经尝试过 session_write_close(),但没有帮助。
  • 您是使用默认的会话处理程序还是自己编写的?

标签: php session


【解决方案1】:

看起来您的问题出在会话写入处理程序的写入函数中。 SQL 语句看起来有点奇怪:

试试:

 Core::Database()->query_execute("REPLACE INTO sessions VALUES (" . 
                                 Core::Database()->query_escape($id) . "'," . 
                                 time() . ",'" . 
                                 data = '" . Core::Database()->query_escape($data) . "')");

代替:

 Core::Database()->query_execute("REPLACE INTO sessions SET 
                                        id = '" . Core::Database()->query_escape($id) . "',
                                        lastaccess = '" . time() . "',
                                        data = '" . Core::Database()->query_escape($data) . "'");

基本上使用带有 REPLACE 的 VALUES 而不是 SET。

【讨论】:

  • 这没有帮助,所以问题一定出在其他地方。我目前正在测试整个网站,看看是否需要自定义会话处理程序。
猜你喜欢
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2018-01-20
  • 2013-02-18
相关资源
最近更新 更多