PHP Cookie销毁不起作用,我做错了什么


PHP Cookie destruction not working, what am I doing wrong?

我正在使用RewriteRule在htaccess中创建烹饪。在我的测试中,我根本无法让这个饼干消失。以下是我创建cookie的方式,我在此线程中得到了帮助:

[L,CO=redirect_indicator:yes:.www.example.com,R=301]

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

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

var_dump($_COOKIE['redirect_indicator']);

然后在脚本结束时,我运行以下内容(在这里的另一个堆栈线程的帮助下)我也尝试了比这更简单的销毁脚本,但似乎没有一个能解决问题:

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仍然会在我第一次var_dump时显示。

无论如何都可以摆脱这个cookie,还是我会永远受浏览器商店的摆布。当我重新启动浏览器时,它确实消失了,但是我需要在脚本执行后这个东西消失。

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

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

如果您需要 cookie 不再影响脚本,请将该值重置为稍后可以定义为异常的值,例如"删除"

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

一些想法:

(1)在你的脚本中,你读出$_COOKIE,然后你覆盖一个cookie,然后你再次看到$_COOKIE。在此期间,_COOKIE 美元是否已更新?正如用户对 http://www.php.net/manual/en/reserved.variables.cookies.php 的贡献说明所说:

"_COOKIE 美元的价值取决于用户代理请求中收到的 cookie 内容。

如果您设置了一个cookie(即将其发送到浏览器),则在下一个请求之前不会将其发回,因此数据不会以$ _COOKIE出现。

第二次调用 $_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]

正如你所写。会不会是你忘记了那一行的第一部分,你的[标志]因此被应用于它上面的任何RewriteRule,甚至应用于每个被调用的页面?

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

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

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