PHP Cookie破坏无法正常工作,我做错了什么?

时间:2012-04-12 16:58:52

标签: php .htaccess mod-rewrite cookies

我正在使用RewriteRule在htaccess中创建一个烹饪。在我的测试中,我根本无法让这个cookie消失。以下是我创建cookie的方法,我在this thread

中得到了帮助
[L,CO=redirect_indicator:yes:.www.example.com,R=301]

因此,cookie具有默认的到期时间,该时间应该仅适用于浏览会话的持续时间。我试图在我的脚本结束时销毁它,我只是得到令人困惑的结果。

因此,我将在我的脚本顶部执行此操作以查看用于测试目的的cookie:

var_dump($_COOKIE['redirect_indicator']);

然后在我的脚本结束时,我运行以下内容(在another stack thread here的帮助下)我尝试了比这更简单的破坏脚本,但似乎没有做到这一点:

if (isset($_SERVER['HTTP_COOKIE'])) {
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie) {
        $parts = explode('=', $cookie);
        $name = trim($parts[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}

现在在代码部分之后我再次运行它:

var_dump($_COOKIE['redirect_indicator']);

并且事实上cookie不存在!这很棒,但只要我在不应生成cookie的页面上再次运行脚本,cookie就会在我的第一个var_dump期间出现。

无论如何都要摆脱这个cookie,或者我总是会受到浏览器存储的影响。当我重新启动浏览器时它确实消失了,但是在脚本执行完之后我需要这个东西消失。

2 个答案:

答案 0 :(得分:1)

setcookie($name, '', time()-1000);

以上确实设置了过去的过期时间,这是删除cookie的唯一方法 - 但是,在所有浏览器窗口关闭之前,cookie不会从用户计算机中删除。

如果您需要cookie不再影响脚本,请将值重置为稍后可以定义为异常的内容,例如“delete”

if(isset($_COOKIE['redirect_indicator']) && $_COOKIE['redirect_indicator'] !== 'delete')

答案 1 :(得分:1)

一些想法:

(1)在你的脚本中,你读出了$ _COOKIE,然后你覆盖了一个cookie,然后再次查看$ _COOKIE。 $ _COOKIE在此期间是否已更新?用户在http://www.php.net/manual/en/reserved.variables.cookies.php上发表的评论说:

$ _COOKIE的价值取决于用户代理请求中收到的Cookie内容。

如果您设置了一个cookie(即将其发送到浏览器),它将不会被发送回下一个请求,因此数据将不会出现在$ _COOKIE中。“< / p>

您对$ _COOKIE的第二次调用只是保留了此变量在脚本开头所持有的值。查看您的浏览器以查看您的cookie是否已更改或删除,而不是$ _COOKIE。

(2)在您链接的主题中,它表示您的.htaccess应该说:

RewriteRule ^example/directory/go\.php$ example.com/go.php [L,CO=tracker:yes:.example.com,R=301]

[L,CO=redirect_indicator:yes:.www.example.com,R=301]
你写的时候。可能是你忘记了该行的第一部分,并且你的[flags]因此被应用于它上面的RewriteRule甚至是被调用的每个页面?

(3)为什么不在重定向中传递旧URL而不是将其保存在cookie中:

    RewriteRule ^(example/directory/go\.php)$ example.com/go.php?old=$1 [R=301]

然后你可以在go.php中解析$ _GET ['old']。