PHP session_set_save_handler:write()之前的read()

时间:2013-08-30 13:58:58

标签: php session

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

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

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

我是不是错了?我感谢任何澄清。如果有人需要任何代码来证明我正在尝试做什么,我会更新它。

1 个答案:

答案 0 :(得分:1)

  

从我的角度来看,这看起来很无用......为什么有人会在有机会检索它之前在END上写(或)存储这些信息?

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

要检索它,会调用读取方法 - 在之前调用,以便您已拥有该信息。但不知何故,这是你在抱怨的......?


我是否正确地假设您对PHP的会话机制的工作方式一无所知?

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

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

当然,在 write 函数之前调用 read 函数。