我有一个会话处理程序类,它在脚本末尾调用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
在另一个页面有机会保存会话之前,我该怎么做才能确保一个页面没有加载会话?
答案 0 :(得分:3)
假设是错误的。
...会话数据被锁定以防止 并发写入只有一个脚本可能 随时进行会话 http://us.php.net/session_write_close
换句话说,你可能同时为一个用户运行100个AJAX请求,他们每个人都会轮流等待。
我的问题在选择正确的会话表列时出错,导致我的会话在每次加载时重新创建。