ini_set中的会话未按预期工作

时间:2015-08-03 11:42:11

标签: php session

我已设置session.gc_maxlifetimesession.cookie_lifetime。如网站上所述, gc_maxlifetime 应设置最长会话时间,并将 cookie_lifetime 设置为 0 应销毁会话。但它没有按预期工作。

我的php文件中有以下代码:

ini_set('session.gc_maxlifetime', 3600); // For testing I keep it for 10 sec
ini_set('session.cookie_lifetime', 0);
session_start();
if ($_GET['set']) {
  $_SESSION['test'] = 'test';
}

if ($_GET['delete']) {
  session_destroy();
}
print_r($_SESSION);

2 个答案:

答案 0 :(得分:0)

最好在php.ini中全局执行此类操作,因为所有脚本都有机会(基于gc_probability / gc_divisor)触发垃圾回收,他们将根据自己的当前设置执行此操作< /强>

如果无法做到这一点,则解决方法是在脚本中设置自定义session_save_path

答案 1 :(得分:0)

session.cookie_lifetime 设置为0并不会破坏会话,它会告诉浏览器在关闭时丢弃cookie。

session.gc_maxlifetime 设置有点棘手。我确实设置了一个会话被认为过期后被删除的时间。然而,这并不是立即发生的,实际上,取决于其他设置 - 它可能根本不会发生 会发生什么,你还有 session.gc_probability session.gc_divisor 设置,它们共同形成了&#34;机会&#34;要运行会话垃圾收集器 - 这在PHP manual中有解释 只有当GC运行时, session.gc_maxlifetime 才会起作用,并且现有会话的时间戳与它进行比较。