我的会话将持续多长时间?

Posted

技术标签:

【中文标题】我的会话将持续多长时间?【英文标题】:How long will my session last? 【发布时间】:2010-12-03 17:29:24 【问题描述】:

谁能根据下面的数据告诉我 - 我不确定是哪一个告诉我的

session.auto_start  Off Off
session.bug_compat_42   Off Off
session.bug_compat_warn On  On
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   0   0
session.name    phpSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /var/lib/php/session    /var/lib/php/session
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    Off Off
session.use_trans_sid   0   0

【问题讨论】:

【参考方案1】:

一般而言,您可以说session.gc_maxlifetime 指定自上次更改会话数据以来的最长生命周期(不是上次调用session_start!)。但是 PHP 的会话处理稍微复杂一些。

因为会话数据被垃圾收集器删除,该垃圾收集器仅由session_start 调用,概率为session.gc_probability 除以session.gc_divisor。默认值为 1 和 100,因此垃圾收集器仅在所有 session_start 调用的 1% 中启动。这意味着即使会话在理论上已经超时(会话数据已在 session.gc_maxlifetime 秒前更改),会话数据也可以使用更长的时间。

因此,我建议您实现自己的会话超时机制。详情请见my answer to How do I expire a PHP session after 30 minutes?

【讨论】:

session.cache_expire 如何与之交互? session.cache_expire 只影响服务器响应的 HTTP 缓存,但对会话过期没有任何影响。 哦,我明白了,cache_expire 与 cache_limiter 一起工作。 PHP的文档对此非常不清楚。我无法破译此处记录的内容:es1.php.net/manual/en/function.session-cache-expire.php,直到我读到:es1.php.net/manual/en/function.session-cache-limiter.php 谢谢@Gumbo @matteo 不幸的是,在很多情况下手册都不清楚。 值得一提的是,在 Debian/Ubuntu 发行版中,PHP 默认禁用其会话垃圾收集机制。相反,它每半小时运行一次 cron 作业(参见脚本 /etc/cron.d/php5)以清除 /var/lib/php5/ 目录中的会话文件。 (来源:appnovation.com/node/2564)【参考方案2】:

就是这个。会话将持续 1440 秒(24 分钟)。

session.gc_maxlifetime  1440    1440

【讨论】:

【参考方案3】:

If session.cookie_lifetime is 0, the session cookie lives until the browser is quit.

编辑:其他人提到了session.gc_maxlifetime 设置。当会话垃圾回收发生时,垃圾回收器将删除所有超过session.gc_maxlifetime秒未访问的会话数据。要设置会话 cookie 的生存时间,请调用 session_set_cookie_params() 或定义 session.cookie_lifetime PHP 设置。如果此设置大于 session.gc_maxlifetime,您应该将 session.gc_maxlifetime 增加到大于或等于 cookie 生命周期的值,以确保您的会话不会过期。

【讨论】:

谢谢,当我关闭浏览器并再次打开页面时,我仍然看到相同的 sessionId? 如果您的浏览器仍在运行,那么,是的。会话 cookie 仅在浏览器应用程序退出时过期。 cookie 是的,但会话本身将在 24 分钟后过期,即使您保持浏览器打开,也没有任何活动。 那是正确的(还有一些我忘了提)。我已经用这些设置的解释编辑了我的答案。 不是访问时间,而是情绪化时间。【参考方案4】:

您正在搜索 gc_maxlifetime,有关说明,请参阅 http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime。

您的会话将持续 1440 秒,即 24 分钟(默认)。

【讨论】:

以上是关于我的会话将持续多长时间?的主要内容,如果未能解决你的问题,请参考以下文章

Android工作线程持续多长时间?

我的 Laravel 5.2.10 会话不会持续

如果我的用户会话持续 30 分钟,我的 Oauth2 访问令牌应该持续的正确时间是多少?

Colab 的使用限制持续多长时间?

如何让用户会话持续 24 小时?

在颤振中,匿名登录会持续多长时间?