【发布时间】:2011-01-10 06:20:24
【问题描述】:
我有一个会话处理程序类,它在脚本末尾调用 session_write_close()。这样可以确保即使发出 header() 或 exit() 也会保存会话数据。
public function __destruct()
{
session_write_close();
}
但是,我注意到对于我的一个 AJAX 页面,数据库层提交了两个会话更新。
我的猜测是 [1] 页面加载并发送 [2] AJAX 请求。 [2] AJAX 请求必须在 [1] 页面有机会调用 session_write_close() 之前启动会话。
在 [2] AJAX 页面加载会话之后,[1] 页面最终保存会话,然后在 [2] AJAX 请求保存它的会话后不久 - 这会覆盖第一个!
它可能看起来像这样:
[1] page loads session
[1] page sends output
[2] ajax loads session
[1] page saves session
[2] ajax sends output
[2] ajax saves session
如何确保一个页面在另一个页面有机会保存会话之前没有加载会话?
【问题讨论】:
-
这很有趣......尽管有大量 ajax 用于各种目的,但我从来没有遇到过这个问题(敲硅),所以我对这个问题的答案很感兴趣。