PHP $_SESSION 正在保存,但无法在没有时间延迟的情况下检索

发布于 2024-12-11 20:15:29 字数 464 浏览 0 评论 0原文

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

现在,问题如下:

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

这是最好的部分:

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

First of all, I tried to find an answer on SO, but couldn't find anything that would be specific to the problem I am having.

Now, the problem is as follows:

  1. I send a JSON string with AJAX to the server, everything is on the same domain, same server
  2. I decode the JSON string, implode it using commas as separators, get a string as a return and save that string into a $_SESSION variable
  3. For testing purposes I even do print_r on the $_SESSION variable right after setting it and I can see that it is being set
  4. When I try and use that $_SESSION variable on a different page, it doesn't exist anymore. The $_SESSION can be accessed, but it's just that variable that doesn't exist.

And here's the best part:

It works if I put sleep(1) before setting the $_SESSION variable or do anything that takes a long time to execute

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花桑 2024-12-18 20:15:29

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

Try:

 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。

It looks as if your problem is in your write function of your session write handler. The SQL statement looks a bit odd:

Try:

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

instead of:

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

Basically use VALUES with a REPLACE instead of SET.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文