繁体   English   中英

PHP如何知道何时删除会话?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM