我有一个已正常工作多年的登录页面/系统,让用户登录,直到他/她关闭浏览器窗口或手动注销。但是最近(从昨天开始)只有几分钟不活动后,会话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:软件导致连接 中止
(问题是,我无法访问服务器设置 - 这是在共享的网站空间上...)
答案 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)
对于任何感兴趣的人:会话实际上没有过期,但会话变量消失了(并且随机再次出现)。
我在此处发布的后续问题中对此进行了讨论:
答案 2 :(得分:0)
您必须将session.name
从默认的PHPSESSID
更改为其他内容。保留其默认值session.name = PHPSESSID
。一切都会好的。
这是一个PHP错误。