0

我正在尝试将所有会话数据保存在数据库中,并让这个类处理所有这些,并使用 session_set_save_handler 进行设置。现在,我不知道是不是因为我不完全理解该函数背后的整个想法,但我遇到的问题是我的 Session 处理程序类的 read() 函数在 write() 函数之前被调用是。这不好的原因是因为 read() 试图在数据库中查找尚未写入数据库的信息,当然它得到空结果。

所以我决定阅读 session_set_save_handler 背后的文档,看起来 write() 的唯一调用时间是会话终止或 PHP 关闭时。从我的角度来看,这似乎毫无用处......为什么有人会在他们有机会检索它之前将这些信息写入()或存储在 END 中?

我想要做的是当有人创建一个使用会话时,这个信息被写入数据库,每当我想检查身份验证或查找用户值时,我想检索所述信息。

我要说这一切都错了吗?我感谢任何澄清。如果有人需要任何代码来演示我正在尝试做的事情,我会更新它。

4

1 回答 1

1

从我的角度来看,这似乎毫无用处......为什么有人会在他们有机会检索它之前将这些信息写入()或存储在 END 中?

在他们有机会找回它之前你是什么意思?

为了检索它,调用了read方法——它在之前被调用,所以你已经有了信息。但不知何故,这就是你在抱怨的……?


我是否正确地假设您根本不了解 PHP 的会话机制是如何工作的?

您在每个脚本之上调用 session_start 。如果 PHP 在传递给脚本的参数中找到会话 ID,它会查找具有该 ID 的现有会话,如果找到,则从中读取数据。从那时起,您就可以使用该数据了——PHP 已为您将其放入超级全局数组 $_SESSION 中。您可以从那里访问它,并且可以将新数据放入其中或更改现有数据。

然后,当脚本结束或 session_write_close 被调用时,数据被回。

所以当然read函数在write函数之前被调用。

于 2013-08-30T14:05:16.950 回答