PHP $_SESSION被保存,但是不能在没有时间延迟的情况下被检索


PHP $_SESSION being saved, but cannot be retrieved without a time delay

首先,我试图找到一个关于SO的答案,但找不到任何特定于我所遇到的问题的答案。

现在,问题如下:

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

这里是最好的部分:

如果我在设置$_SESSION变量之前放置sleep(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) . "'");

基本上使用VALUES和REPLACE代替SET。