所以我试图阻止用户通过禁用登录页面来登录两次,如果他们设法到达那里的话。
在我的页面顶部,我有:
<?php
session_start();
if($_SESSION['loggedin'] != true){
run page...
}
else {
echo "You are already logged in! If you believe this in a error, please let us know. Thanks!";
}
?>
看起来非常简单,但即使我通过下面的退出脚本注销,它也会回复“你已登录”
这是我的退出脚本:
session_start();
session_destroy();
$_SESSION = array();
header('Location: index.php');
exit;
在我的登录页面上,我有:
session_regenerate_id();
$_SESSION['sess_user_id'] = $id;
$_SESSION['sess_username'] = $xusername;
$_SESSION['sess_gender'] = $gender;
$_SESSION['sess_homelat'] = $homelat;
$_SESSION['sess_homelng'] = $homelng;
$_SESSION['loggedin'] = true;
但这似乎不是问题。
我在本地开发,如果这改变了什么?
编辑:到目前为止,解决方案似乎是删除cookie,如下所示。
答案 0 :(得分:2)
您可以将会话变量向后清除到session_destroy
。你想要这样做:
session_start();
$_SESSION = array();
session_destroy();
As per the docs,您还可以删除会话cookie以确保完全销毁所有内容:
session_start();
$_SESSION = array();
$_SESSION['loggedin'] = false; // Just in case
// 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"]
);
}
session_destroy();
在您的登录页面上,您是否$_SESSION['loggedin'] = true;
被任何if语句所包围?通过在其后添加die('loggedin session var has been set!');
来检查是否无意中设置了它。