登录页面会话信息阻止双重登录

时间:2014-12-16 01:08:09

标签: php session session-variables

所以我试图阻止用户通过禁用登录页面来登录两次,如果他们设法到达那里的话。

在我的页面顶部,我有:

<?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,如下所示。

1 个答案:

答案 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!');来检查是否无意中设置了它。

相关问题