会话销毁/注销奇数问题

时间:2012-08-02 02:27:47

标签: php session cookies login logout

我的网站使用一个简单的登录系统,为用户名和登录会话创建一个cookie。如果有人访问home.php并且登录会话设置为已登录,则会将其推送到登录区域。否则,他们使用简单的表单和处理程序页面登录。要注销用户,请单击指向logout.php的链接,该链接包含以下代码:

<?

session_start();

setcookie(username, $username, time()-360000);

session_start($_SESSION['login']);
$_SESSION["Login"] = "no";

header("Location: home.php");
session_destroy();

?>

以下是正在发生的事情。单击注销按钮的用户将被正确踢出到home.php页面。如果他们刷新页面,他们将保留在home.php页面上。到目前为止似乎很好。

但是,如果他们离开主页,则会将其带入登录区域。如果他们转到登录区域的URL,则不会被踢出(因为会话检查脚本确认会话值已设置为已登录)。

我傻眼了。无论如何我不是PHP专业人士 - 我做错了什么???

1 个答案:

答案 0 :(得分:0)

要使会话无效,您只需删除Cookie即可。

setcookie("username", "", time()-360000);

将完成这项工作。请注意,用户名应使用引号",否则不会引用Cookie名称。

因此,您在注销时的代码将如下所示

<?
    session_start();
    setcookie("username", "", time()-3600);
    header("Location: home.php");
?>

当用户登录并验证时,您需要为他们设置cookie,然后将其重定向到经过身份验证的网址     

您还需要在经过身份验证的区域中的每个网页的开头检查您的Cookie,如下所示

<?
    session_start();
    if (!isset($_COOKIE["username"]))
        header("Location: home.php");
?>

希望这会有所帮助

Here是另一个设置,使用和删除Cookie的示例