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