我已经看了一些以前回答过的问题,但这些解决方案似乎对我不起作用。
所以我有一个简单的登录脚本,看起来如下:
login.php
// 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;
注销.php
// 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。
大多数时候,一切似乎都很顺利。然而,我一直注意到,自从我转移到一个新的服务器上,并使用php6.5.64时,我会时不时地超时。
例如,现在我可以使用Internet Explorer登录,但不能使用Firefox或Chrome。如果我清除cookie,我可以使用Firefox和Internet Explorer登录,但不能使用Chrome。
更新
我可以通过成功登录、立即注销然后再次登录来立即导致超时。第二次登录时超时。
这真的让我很沮丧,而且我不是一个会话大师,所以我不明白它为什么会这样做,也不明白如何修复它,使它不那么微妙。
我只是使用会话来记录登录,而不是用于其他任何事情。我确实在网站的某些页面上使用AJAX,但并不经常。
基本上,我从不希望这件事超时。我该如何防止这些超时事件的发生
我已经解决了这个问题。首先,我在注销页面上使用了一个表单按钮,允许用户重新登录。我用一个标准链接代替了它。
第二,登录后,登录页有一段代码,会在日志文件上创建错误警告,foreach需要一个数组(即使它是一个数组并正确输出)。删除这部分代码似乎解决了这个问题。我不知道这会引起什么问题。