我正在使用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,或者我总是会受到浏览器存储的影响。当我重新启动浏览器时它确实消失了,但是在脚本执行完之后我需要这个东西消失。
答案 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']。