为什么将session.cookie_lifetime设置为23天?[关闭]


9

据我了解,Drupal的会话生存时间受session.gc_maxlifetime设置的限制,默认情况下设置为2.3天。

那么session.cookie_lifetime设置为23天有什么用?

这是settings.php中的代码片段:

/**
 * Set session lifetime (in seconds), i.e. the time from the user's last visit
 * to the active session may be deleted by the session garbage collector. When
 * a session is deleted, authenticated users are logged out, and the contents
 * of the user's $_SESSION variable is discarded.
 */
ini_set('session.gc_maxlifetime', 200000);

/**
 * Set session cookie lifetime (in seconds), i.e. the time from the session is
 * created to the cookie expires, i.e. when the browser is expected to discard
 * the cookie. The value 0 means "until the browser is closed".
 */
ini_set('session.cookie_lifetime', 2000000);

请 仅出于此问题而已将session.gc_probability和都设置session.gc_divisor为1。


因为您不想让Cookie神秘消失?您希望它在那里,以便可以优雅地使会话无效吗?这会给您造成实际问题吗?
Mołot

就是这样。但是,使cookie在40小时后失效,在服务器会话中51小时失效,不是更好的主意吗?我的意思是Cookie生存期小于服务器过期时间。
user5858 2014年

这在很大程度上是基于观点的,只有PHP作者才能真正说出。哦,这取决于您决定使用的会话处理程序。但是通常不,您不希望会话处于活动状态并且可以使用X个小时以上,并且由于缺少cookie而没有人可以使用它。这是浪费存储空间。保留cookie的时间越长,意味着几乎总是有人可以使用服务器上保留的会话数据,因此,没有会话数据就浪费了。
Mołot

Answers:


16

ini_set('session.gc_maxlifetime',200000);

  1. 该值用于服务器。
  2. 它是会话垃圾收集的设置。
  3. 如果用户的上次访问发生在200000之前,则该会话有资格进行垃圾回收。
  4. 由于它是GC,因此会话值可能会被丢弃而不是强制性的。如果在使会话符合GC资格后发生了GC操作,它将被删除。
ini_set('session.cookie_lifetime', 2000000);
  1. 该值适用于浏览器。

  2. 这是浏览器可以使该cookie保持活动状态的绝对最大时间。

  3. 此处的0值表示立即或关闭浏览器。

特别是要回答您的问题。

  1. 如果用户在2.3天内没有再次击中服务器,则在运行会话垃圾回收时将删除其会话。
  2. 如果他每隔2.2天(少于2.3天)不断访问服务器上的一页,则他的会话将保持活动状态。但是它只能在会话首次生成后的23天之前处于活动状态。
  3. 因此,这意味着session.cookie_lifetime会话的绝对最大生存期。

1
注意概率垃圾收集器。更多详细信息:stackoverflow.com/a/1270960
2015年

很好的答案,如果您可以访问服务器上的php.ini也可以在php.ini中完成,例如在/etc/php/5.6/fpm/php.iniAdjust(或add)设置中: session.gc_maxlifetime = 2000000。谢谢。
therobyouknow
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.