我已经查看了一些以前回答过的问题,但这些解决方案似乎对我不起作用。
所以我有一个简单的登录脚本,如下所示:
// If page requires SSL, and we're not in SSL mode,
// redirect to the SSL version of the page
if($_SERVER['SERVER_PORT'] != 443) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit();
}
// put sha1() encrypted password here
$password = 'sha1passwordgoeshere';
session_start();
if (!isset($_SESSION['loggedIn'])) {
$_SESSION['loggedIn'] = false;
}
if (isset($_POST['password'])) {
if (sha1($_POST['password']) == $password) {
$_SESSION['loggedIn'] = true;
} else {
$logFailure = true;
}
}
if (!$_SESSION['loggedIn']):
// Load Login Page
exit();
endif;
// If page requires SSL, and we're not in SSL mode,
// redirect to the SSL version of the page
if($_SERVER['SERVER_PORT'] != 443) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit();
}
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
我的其余页面包含文件顶部的login.php。
大多数时候,一切似乎都很好。但是,我一直注意到,因为我已经转移到一个新的服务器,并使用PHP 5.6.14,我不时被定时。
例如,现在我可以使用Internet Explorer登录,但我无法使用Firefox或Chrome。如果我清除cookie,我可以使用Firefox和Internet Explorer登录,但不能登录Chrome。
我可以通过成功登录,立即注销,然后再次登录来立即导致超时。在第二次登录时,它会超时。
这真让我感到沮丧,我不是会议大师,所以我不明白为什么会以这种方式行事,或者如何解决它以使其不那么微妙。
我只使用会话来记录登录,而不是其他任何事情。我确实在网站的某些页面上使用AJAX,但不经常使用。
基本上,我从不希望这个超时。我该如何防止这些超时发生?
答案 0 :(得分:0)
我已经解决了这个问题。首先,我在注销页面上使用了一个表单按钮,允许用户重新登录。我用标准链接替换了它。
其次,登录后,登录页面有一段代码会在日志文件上创建错误警告,其中foreach期望一个数组(即使它是一个数组并正确输出)。删除该部分代码似乎解决了这个问题。我不确定这会如何导致问题。