我认为会话存储在客户端,因为会话在浏览器关闭时被删除。但是,今天我被告知这不是真的,并且会话存储在服务器上。
那么会话如何知道浏览器何时关闭,以便会话被删除?
答案 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。
一旦在给定的时间内(会话超时)没有请求,会话将从服务器中删除。