php会话在几分钟后随机过期

时间:2017-01-03 01:25:09

标签: php session session-cookies

我有一个已正常工作多年的登录页面/系统,让用户登录,直到他/她关闭浏览器窗口或手动注销。但是最近(从昨天开始)只有几分钟不活动后,会话cookie / s似乎到期,导致用户自动注销。

这种情况发生在不同的浏览器和不同的操作系统上,PHP版本是5.6.29,最近已经更改(在5.5甚至5.3之前)。

我使用session_start()在每个页面上创建并刷新会话。登录脚本首先检查用户名和PW,并从数据库中获取一些其他用户数据。这些其他数据首先保存在变量中,然后写入会话变量,如

$_SESSION['username'] = $name;
$_SESSION['usertype'] = $type;

成功登录状态保存如下:

$_SESSION['login'] = "ok";

在其他页面上,我检查登录状态,如下所示:

session_start();
if(($_SESSION['login'] != "ok") OR ($_SESSION['usertype'] != "xxx")) {
 header("Location: ../login.php"); /* redirects to login page if conditions are not true */
 exit;
 }

登录工作正常,登录用户可以继续其他页面,只要或多或少连续不断地执行,但如果有人等待几分钟则在程序之前(即没有任何页面)他/她已退出(即在尝试打开另一个页面时重定向到登录页面)。

为了让它更加令人讨厌,有一半的时间它按预期工作,也是半小时后......

非常感谢任何帮助。

更新:

添加ini_set('session.gc_maxlifetime', 3600');和`ini_set(' session.cookie_lifetime',3600);没有帮助。我再次删除了它。

之后我查看了错误日志,发现了这个:

  

ap_pass_brigade失败,错误103:软件导致连接   中止

(问题是,我无法访问服务器设置 - 这是在共享的网站空间上...)

3 个答案:

答案 0 :(得分:1)

你可以通过phpinfo();

看到php配置(php.ini)
<?php
phpinfo();

首先检查session.gc_maxlifetime值,如果需要设置,请参阅以下方法。

如果您没有编辑php.ini文件的权限,可以使用.htaccess文件进行设置。

的.htaccess

<IfModule mod_php5.c>
    php_value session.cookie_lifetime 3600
    php_value session.gc_maxlifetime 3600
</IfModule>

即使您可以按ini_set();

进行设置
<?php
     ini_set('session.gc_maxlifetime', 3600);

答案 1 :(得分:0)

对于任何感兴趣的人:会话实际上没有过期,但会话变量消失了(并且随机再次出现)。

我在此处发布的后续问题中对此进行了讨论:

php $_SESSION variables disappear and reappear randomly

答案 2 :(得分:0)

您必须将session.name从默认的PHPSESSID更改为其他内容。保留其默认值session.name = PHPSESSID。一切都会好的。

这是一个PHP错误。