php - SessionHandlerInterface::write 和 SessionUpdateTimestampHandlerInterface::updateTimestamp 有什么区别?

标签 php session

PHP session 逻辑有两个不同的 SessionHandlerInterfaceSessionUpdateTimestampHandlerInterface SessionUpdateTimestampHandlerInterface 接口(interface)文档中仍未完整描述接口(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 中可以找到一些很好的信息.

关于php - SessionHandlerInterface::write 和 SessionUpdateTimestampHandlerInterface::updateTimestamp 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53647435/

相关文章:

java - Spring MVC - 将相同的对象从一个页面传输到另一个页面

PHP 重定向 header

c# - 是否可以使用 SSH.NET 从单个登录 session 执行多个 SSH 命令?

php - php可以查询之前查询的结果吗?

php - 分解数据库值,然后通过选择 <select multiple> 标签来回显

javascript - 仅在模态打开时加载 iframe src

ruby - 保存和恢复 watir session

php - cakephp-2.0 最简单的 ajax 链接与 jshelper

php - 如何在 Slim 中将可选参数构建为问号?

php - Symfony2 - PDO session - 我需要手动删除记录还是一切都是自动的?