为什么标准会话生存期为24分钟(1440秒)?


101

我一直在研究PHP会话处理,发现session.gc_maxlifetime值1440秒。我一直想知道为什么标准值为1440,以及如何计算?此计算的依据是什么?

保持会话多长时间才有意义?您会建议session.gc_maxlifetime的最小/最大值是多少?我说,价值越高,Web应用程序在会话劫持中就越容易受到攻击。


+1好问题。与60 x 12 x 2有关的东西...让我们等待有趣的答案... :)
Praveen Kumar Purushothaman

4
是设置默认值的源代码行。那些熟悉GIT的人可能能够跟踪其历史记录,并且可能找到RFC或Bug票证(如果有)。
阿尔瓦罗·冈萨雷斯

1
@ Anil:此讨论不能回答我的问题。
AnnaVölkl13年

2
@ÁlvaroG.Vicario我找到了更改:github.com/php/php-src/commit/…但是相关的相关文档为零。1440确实是超时的原始分钟数,所以我想除非有人跟踪Sascha Schumann,否则我们永远不会知道。

6
我找到了Sascha的电子邮件地址,并就此与他联系,我会告诉人们他是否会回应。

Answers:


183

真正的答案可能非常接近:

在PHP3天内,PHP本身没有会话支持。

但是最初由NetUSE AG的Boris Erdmann和Kristian Koehntopp编写的一个名为PHPLIB的开源库通过PHP3代码提供了会话。

会话生存时间以分钟为单位,而不是以秒为单位。默认的生存期是1440分钟,或者恰好是一天。这是PHPLIB的代码行:

var $gc_time  = 1440;       ## Purge all session data older than 1440 minutes.

Sascha Schumann在1998年至2000年期间参与了PHPLIB项目。毫无疑问,他熟悉PHP3会话代码。

然后,PHP4于2000年问世,它具有本机会话支持,但现在指定生存期的时间以秒为单位。

我敢打赌,有人永远不会把分钟转换为秒。这个人很可能是Sascha Schumann。一旦将该值编码到Zend引擎中,它也将成为php.ini默认配置()。


3
令人惊讶的是,在更换单元时24具有特殊的意义。因此,从给定的答案中,您的答案对我来说最有意义。
马库斯·马尔库施

1
那很有意思。感谢分享!:)
SysVoid

3
这真的很有趣!谢谢!
AnnaVölkl'16

对PHP4默认设置的一种参考: github.com/php/php-src/blob/PHP-4.0/ext/session/session.c
CXJ

根据PHP文档,会话生存期以秒为单位设置:php.net/manual/en/…–
lemhannes,

-16

1440用于时间计算,将秒转换为小时/天。

  • 1天= 24小时(小时* 24 = 1天)
  • 天= 1440分钟(分钟* 60 * 24 = 1天)
  • 天= 86400秒(秒* 60 * 1440 = 1天)

例:

9天[* 60] = 540 [* 1440] = 777600秒

反之亦然:

777600秒[/ 1440] = 540 [/ 60] = 9天


14
那为什么标准的会话生存期呢?
费利克斯·加侬-格雷尼尔

3
因为它的数学书呆子数与研究显示的数值大致相同,所以它是同一会话中两次请求之间的最大时间(20-30分钟)。
dimitar veselinov 2015年

22
@dimitarveselinov哪个研究?
马库斯·马尔库施
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.