PHP session_set_save_handler: read() before write()


PHP session_set_save_handler: read() before write()

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

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

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

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

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

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

要检索它,将调用read方法,并在之前调用,这样您就已经有了信息。但不知怎么的,这就是你在抱怨的…?


我假设您根本不了解PHP的会话机制是如何工作的,这是对的吗?

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

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

因此,read函数当然是在write之前调用的。