我的会话将持续多长时间?
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 分钟(默认)。
【讨论】:
以上是关于我的会话将持续多长时间?的主要内容,如果未能解决你的问题,请参考以下文章