【问题标题】:Logout script doesn't work when redirection is set设置重定向时注销脚本不起作用
【发布时间】:2012-02-03 10:47:34
【问题描述】:

我有以下注销脚本:

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 文件,效果很好。

【问题讨论】:

  • 您是否 100% 确定您浏览了 PHP 文件?删除重定向并打印一些东西而不是它,然后尝试看看它是否仍然重定向。
  • @Martti 我将重定向更改为位置:site.net/?a,我可以看到重定向有效,如果这就是您的意思
  • 你的缓存设置是什么,你的服务器上安装了memcached吗?

标签: php .htaccess redirect apache2


【解决方案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 时也这样做。

【讨论】:

  • 这并没有解决它.. 没有错误或任何东西,它确实将我重定向到主页,但它不会删除 cookie。重定向后我仍然登录
  • 我将 setcookie 更改为 unset(),但我得到了相同的结果。另外,直接链接到 .php 文件时怎么可能有效,但我使用重定向时却无效?
【解决方案2】:

在 htaccess 文件中试试这个

Options +FollowSymlinks
RewriteEngine on

RewriteBase /

RewriteRule ^log\-out logout.php

将 RewriteBase 设置为您的基本网址:希望您知道这一点。

【讨论】:

    猜你喜欢
    • 2016-10-28
    • 2023-04-08
    • 1970-01-01
    • 2023-03-10
    • 2016-08-23
    • 2013-09-15
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多