我有以下注销脚本:
setcookie("key", "", time() - 36000);
setcookie("usr_email", "", time() - 36000);
session_destroy();
header("Location: http://www.site.net/");
当我直接关注该页面时(logout.php),它可以很好地将用户注销。
但出于某种原因,当我使用时:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^log-out /logout.php
我可以看到重定向有效,但是没有执行注销。
编辑:刚刚检查过,在重定向回主页后,cookie仍然可用。只是澄清一下,如果我直接进入注销php文件,它的效果很好。
答案 0 :(得分:1)
我认为问题是你的htaccess文件中的连字符。试试这个:
RewriteRule ^log\-out /logout.php
你能说出发生的错误/行为吗?
修改强>
问题出在你的PHP上。首先,我建议在会话中存储与登录相关的数据,而不是cookie。 Cookie可以由用户添加和编辑。
无论如何,代码应该成功清除(如果不是删除)cookie。因此,您可能会根据Cookie是否存在而不是其内容来检查您是否已登录。在这种情况下,请尝试if(empty($_COOKIE['key']))
,这将检查它是否为空。
完全删除Cookie:unset($_COOKIE['key'])
。
顺便说一下,session_destroy()
根本与cookie无关。
编辑2:
尝试将cookie分配给您的域及其所有子域(包括www):
setcookie('key', '', time() - 36000, '/', '.mysite.net');
添加Cookie时也一样。
答案 1 :(得分:0)
在htaccess文件中尝试此操作
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^log\-out logout.php
将RewriteBase设置为您的基本网址:希望您知道这一点。