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