您的自定义会话处理程序不应包含对任何会话函数的调用,例如 session_name() 或 session_id(),因为相关值作为参数传递给各种处理程序方法。尝试从替代来源获取值可能无法按预期工作。
要实现数据库存储或任何其他存储方法,您需要使用 session_set_save_handler() 创建一组用户级存储函数。会话处理程序可以使用 SessionHandlerInterface 创建,也可以通过继承 SessionHandler 来扩展 PHP 的内部处理程序。
在 session_set_save_handler() 中指定的回调是在会话生命周期中由 PHP 调用的方法:open
、read
、write
和 close
,以及用于维护任务的回调:destroy
用于删除会话,gc
用于定期垃圾回收。
因此,PHP 始终需要会话保存处理程序。默认通常是内部 'files' 保存处理程序。可以使用 session_set_save_handler() 设置自定义保存处理程序。PHP 扩展还提供了备用的内部保存处理程序,例如 sqlite
、memcache
和 memcached
,并且可以使用 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
的记录。
您的自定义会话处理程序不应包含对任何会话函数的调用,例如 session_name() 或 session_id(),因为相关值作为参数传递给各种处理程序方法。尝试从替代来源获取值可能无法按预期工作。