2024 PHP 日本大会

自定义会话处理程序

要实现数据库存储或任何其他存储方法,您需要使用 session_set_save_handler() 创建一组用户级存储函数。可以使用 SessionHandlerInterface 创建会话处理程序,或者通过继承 SessionHandler 来扩展 PHP 的内部处理程序。

session_set_save_handler() 中指定的回调是 PHP 在会话生命周期中调用的方法:openreadwriteclose,以及用于日常维护任务的方法:destroy 用于删除会话,gc 用于定期垃圾回收。

因此,PHP 始终需要会话保存处理程序。默认值通常是内部的“files”保存处理程序。可以使用 session_set_save_handler() 设置自定义保存处理程序。PHP 扩展还提供其他内部保存处理程序,例如 sqlitememcachememcached,并且可以使用 session.save_handler 设置。

会话启动时,PHP 将在内部调用 open 处理程序,然后调用 read 回调,该回调应返回与最初传递用于存储的编码字符串完全相同的字符串。一旦 read 回调返回编码字符串,PHP 将对其进行解码,然后将结果数组填充到 $_SESSION 超全局变量中。

当 PHP 关闭(或调用 session_write_close() 时),PHP 将在内部编码 $_SESSION 超全局变量,并将其与会话 ID 一起传递给 write 回调。在 write 回调完成后,PHP 将在内部调用 close 回调处理程序。

当特定会话被销毁时,PHP 将使用会话 ID 调用 destroy 处理程序。

PHP 将不时调用 gc 回调,以根据会话设置的最大生存时间使任何会话记录过期。此例程应删除从持久存储中访问时间长于 $lifetime 的所有记录。

添加注释

用户贡献笔记

此页面没有用户贡献的笔记。
To Top