0

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

4

1 回答 1

0

要使您的会话无效,您只需删除您的 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");
?>

希望这可以帮助

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

于 2012-08-02T02:48:14.250 回答