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

时间:2012-01-01 15:47:28

标签: php session

我认为会话存储在客户端,因为会话在浏览器关闭时被删除。但是,今天我被告知这不是真的,并且会话存储在服务器上。

那么会话如何知道浏览器何时关闭,以便会话被删除?

3 个答案:

答案 0 :(得分:6)

没有。有两个因素在起作用:

  • 客户端的lifetime of the cookie; 此cookie包含会话ID。它与会话数据本身没有任何关系

      

    手册可能没有足够的压力:

         

    这与会话的生命周期无关

         

    无论您将此设置设置为什么,都不会更改会话的持续时间   住在你的服务器上。

         

    这只会更改HTTP缓存过期时间(Expires:和   Cache-Control: max-age标题),建议浏览器多长时间   可以将页面缓存在用户的缓存中,而无需重新加载它们   来自服务器。

  • 服务器端会话数据的生命周期; 通过使用来自客户端的会话ID查找来“激活”会话。它的生命周期是通过session garbage collection settings discussed here控制的。

    评论者发布在session.cache_expire文档页面上,可能实际上是在谈论会话数据:

      

    大多数人也不知道的是,大多数Linux发行版   (Debian和Ubuntu至少对我来说)有一个cronbjob来清理你的   session dir使用全局/etc/php5/php.ini中设置的值(其中   默认为24分钟)。所以,即使你设置的值更大   脚本,cronbjob仍将使用全局清理会话   值。

         

    如果遇到这种情况,可以将全局值设置为更高   /etc/php5/php.ini,禁用cronjob甚至更好,自己做   非系统范围目录或数据库中的会话清理。

    正如您所看到的,在区分会话跟踪和会话数据存储之间,社区中存在大量混淆。

答案 1 :(得分:3)

会话由cookie标识,该cookie确实存储在浏览器中。它可以有一个到期日期/时间,或者可以设置为在浏览器关闭时到期。当cookie过期时,您无法再识别会话存储,并且会话实际上已过期。除非系统管理员或程序员专门进行清理,否则不会删除它。

编辑刚刚注意到了PHP标记。有关PHP如何清理其会话文件,请检查this question

答案 2 :(得分:0)

服务器无法知道浏览器何时关闭。 关闭浏览器将从客户端删除会话ID cookie。

一旦在给定的时间内(会话超时)没有请求,会话将从服务器中删除。