[英]How does PHP know when to delete a session?
我认为会话存储在客户端,因为会话在浏览器关闭时被删除。 但是,今天我被告知这不是真的,并且会话存储在服务器上。
那么会话如何知道浏览器何时关闭,以便会话被删除?
它没有。 有两个因素在起作用:
客户端cookie的生命周期 ; 此cookie包含会话ID。 它与会话数据本身没有任何关系 。
手册可能不会强调这一点:
这与会话的生命周期无关
无论您将此设置设置为什么,它都不会更改会话在您的服务器上运行的时间。
这只会更改HTTP缓存过期时间(
Expires:
和Cache-Control: max-age
标头),它会告知浏览器可以将页面缓存在用户缓存中的时间长度,而无需从服务器重新加载它们。
服务器端会话数据的生命周期; 通过使用来自客户端的会话ID查找来“激活”会话。 它的生命周期通过此处讨论的会话垃圾收集设置来控制
一位评论者发布在session.cache_expire
文档页面上,大概是在谈论会话数据:
大多数人也不知道的是,大多数Linux发行版(至少对我来说是Debian和Ubuntu)都有一个cronbjob,可以使用全局
/etc/php5/php.ini
中设置的值来清理你的会话目录(默认为24mins)。 因此,即使您在脚本中设置了更大的值,cronbjob仍将使用全局值清理会话。如果遇到这种情况,可以在
/etc/php5/php.ini
设置更高的全局值,禁用cronjob甚至更好,在非系统范围的目录或数据库中进行自己的会话清理。
正如您所看到的,在区分会话跟踪和会话数据存储之间,社区中存在大量混淆。
会话由cookie标识,cookie确实存储在浏览器中。 它可以有一个到期日期/时间,或者可以设置为在浏览器关闭时到期。 当cookie过期时,您无法再识别会话存储,并且会话实际上已过期。 除非系统管理员或程序员专门进行清理,否则不会删除它。
编辑刚刚注意到PHP标记。 有关PHP如何清理其会话文件,请检查此问题 。
服务器无法知道浏览器何时关闭。 关闭浏览器将从客户端删除会话ID cookie。
一旦在给定的时间内没有请求(会话超时),会话将从服务器中删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.