PHP - 会话随机销毁

时间:2013-11-09 16:33:26

标签: php .htaccess session garbage-collection

我使用这些行在PHP中激活我的会话:

session_name("DELogin");
session_set_cookie_params((60*60*24*14), "/", ".myweb.com");
session_start();

但是,会话随机在设置的到期时间(甚至是浏览器会话)之前停止工作(似乎)。 如你所见,它应该持续2周。 是否有一些需要改变的设置?

我无法访问php.ini,但我可以通过.htaccess更改这些设置(对吗?)。 我看到session.gc_probabilitysession.gc_divisorsession.gc_maxlifetime,但我认为它应该可以在不改变这些设置的情况下工作。 (如果我要改变这些,请回复)

提前致谢

编辑: 我尝试了Eugen Rieck和Dan Walker的建议,但都无济于事。 我在.htaccess文件中设置了设置,因此我不必在每个页面上都包含它们:

php_value session.gc_maxlifetime 1209600
php_value session.cookie_lifetime 1209600

php_value session.cookie_domain ".mydomain.com"
php_value session.name "DELogin"
php_value session.auto_start 1

然而,经过一段时间后它仍然被“清除”。 (调查导致发现会话仍在那里,但对$_SESSION['id']的测试导致false,这应该在用户未登录时)。 因此,$_SESSION['id']更改为false,或者会话被删除并自动(重新)生成$_SESSION['id'] false。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

您是否尝试过设置会话Cookie生命周期变量?

ini_set("session.cookie_lifetime","3600"); //an hour

此外,您可以通过创建名为phpinfo.php的文件并在其中弹出以下内容来检查PHP.ini文件中设置的设置:

<?php phpinfo(); ?>

浏览它。

答案 1 :(得分:0)

要使会话起作用,它必须在双方都有效:服务器和客户端。您的cookie参数仅适用于客户端,因此服务器端留给标准的PHP清理机制。您需要查看的参数是session.gc_maxlifetime