【问题标题】:How to have PHP session expire upon browser close OR some extended duration of time如何让 PHP 会话在浏览器关闭或一段时间后过期
【发布时间】:2011-04-16 05:53:48
【问题描述】:

当用户关闭浏览器时,我的 php 会话设置为过期,但我注意到如果我让浏览器长时间打开(例如 24 小时以上),会话仍然存在。

有没有办法让这些会话在浏览器关闭或经过一段时间后过期?

【问题讨论】:

标签: php session session-timeout


【解决方案1】:

解决方案可能是通过ini_set('session.gc_maxlifetime', <lifetime in seconds>); 设置数据当然如果可以通过PHP 更改配置。否则,您需要在 php.ini 中设置正确的值:

ini_set(‘session.gc_maxlifetime’,30);
ini_set(‘session.gc_probability’,1);
ini_set(‘session.gc_divisor’,1);

另一种方法是设置会话cookie的有效性:

$expire=24*60*60;
session_set_cookie_params($expire);
session_start();

【讨论】:

  • 垃圾收集器是要走的路,因为当你摆弄 cookie 的生命周期时,cookie 不会在浏览器关闭时消失。请务必对未经授权的用户致电session_regenerate_id(),以防止会话固定。
  • @Wrikken 您是否建议在我捕获未经授权的用户时调用 session_regenerate_id ?
  • 使用 1 作为除数和概率可以确保我们始终检查 CPU 密集型的垃圾,对吧?
  • @chris:你可以根据$_SESSION数组中的一个变量来做:session_start();if(!isset($_SESSION['id_generated_by_server'])){ session_regenerate_id(); $_SESSION['id_generated_by_server'] = true;}
  • 依靠垃圾收集器为你做超时不是一个好主意。它只在 RANDOM 时间表上启动。最好将一些超时检查放入会话处理程序本身,如果空闲时间超过超时,则强制重新验证或其他操作。
猜你喜欢
  • 2012-12-18
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2013-11-17
  • 1970-01-01
  • 2011-09-22
相关资源
最近更新 更多