【问题标题】:Session Destruction / Logout Odd Issue会话破坏/注销奇怪问题
【发布时间】:2012-07-30 23:58:23
【问题描述】:

我的站点使用一个简单的登录系统,该系统为用户名和登录会话创建一个 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 专业人士——我做错了什么???

【问题讨论】:

    标签: php session cookies login logout


    【解决方案1】:

    要使您的会话无效,您只需删除您的 cookie。

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

    将完成这项工作。请注意,用户名应该用引号括起来 " 否则它不会引用 cookie 名称。

    所以您在注销时的代码将如下所示

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

    当用户登录并通过验证时,您需要为他们设置一个 cookie,然后将它们重定向到您经过验证的 url

    您还需要在已验证区域中每个页面的开头检查您的 cookie,如下所示

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

    希望对你有帮助

    Here 是另一个设置、使用和删除 cookie 的示例

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2018-07-31
      • 2016-02-03
      • 1970-01-01
      • 2012-11-25
      • 2013-02-12
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      相关资源
      最近更新 更多