自定义会话处理程序

要实现数据库存储或任何其他存储方法,您需要使用 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 的记录。

添加注释

用户贡献注释 1 个注释

tony at marston-home dot demon dot co dot uk
6 年前
您的自定义会话处理程序不应包含对任何会话函数的调用,例如 session_name() 或 session_id(),因为相关值作为参数传递给各种处理程序方法。尝试从替代来源获取值可能无法按预期工作。
To Top