SessionHandlerInterface

SessionHandlerInterface

PHP session 逻辑具有两个截然不同的SessionHandlerInterfaceSessionUpdateTimestampHandlerInterface接口(interface),而doct中仍未完全描述SessionUpdateTimestampHandlerInterface接口(interface)。
SessionHandlerInterface::writeSessionUpdateTimestampHandlerInterface::updateTimestamp函数的感觉非常相似。两者具有相同的参数( session ID和 session 数据),并返回 bool 值。

这两个功能有什么区别?

实现这两个功能的代码应如何区别?

如果没有为updateTimestamp函数提供时间戳,该代码应如何更新时间戳?

编辑:我创建了一个PHP bug regarding the missing docs

最佳答案

这两种方法非常相似,但是在不同情况下被称为。

1)

没有SessionUpdateTimestampHandlerInterface的SessionHandler:

登录的用户请求页面,并且其 session 与所有数据均被加载。在请求期间,数据集是而不是修改的,一旦 session 关闭,所有数据将再次写入存储(调用SessionHandlerInterface::write)。因此,您将一遍又一遍地写入相同的数据。

具有SessionUpdateTimestampHandlerInterface的SessionHandler:

相同的情况,但现在如果不修改数据集,它将调用SessionUpdateTimestampHandlerInterface::updateTimestamp。优点是现在您知道不需要再次写入数据集,而只需更新现有数据集的生存期即可。这可以是巨大的性能改进。

2)

那取决于您存储 session /数据的位置。 SessionHandlerInterface::write应该真正写数据,如果可能的话,SessionUpdateTimestampHandlerInterface::updateTimestamp应该只是更新现有项的生存期。 Symfony有一些不错的examples

3)

时间戳应与最大生命周期相同,以便在每个请求上“重置”该时间戳,就像正常写入一样。

如前所述,目前的文件数量不佳。在此RFC中可以找到一些很好的信息。

10-07 14:43