【问题标题】:Initial creating then deleting a cookie works, but can't recreate it afterwards初始创建然后删除 cookie 有效,但之后无法重新创建
【发布时间】:2015-06-06 14:18:23
【问题描述】:

我需要创建和删除 cookie。

问题是我可以创建,然后删除 cookie,但是在之前删除的 cookie 之后,我无法创建一个新的。为什么?

清除浏览器缓存后再次生效。

创建cookie并重定向到测试页面:

<?php
    $cookie_name = 'name';
    $cookie_time = 2000000000;
    $cookie_path = '/';
    $cookie_value = uniqid();

    setcookie($cookie_name, $cookie_value, $cookie_time, $cookie_path);

    echo '<script> window.location.assign("test.php"); </script>';
?>

删除 cookie 并重定向到测试页面:

<?php
    $cookie_name = 'name';
    $cookie_path = '/';

    setcookie($cookie_name, '', time() - 3600, $cookie_path);

    echo '<script> window.location.assign("test.php"); </script>';
?>

测试页面中只有print_r($_COOKIE);

我在这里做错了什么? cookie 的名称有问题吗?是浏览器限制吗?

我需要能够在需要时创建和删除 cookie。

我试图通过使用以下代码来避免缓存:

<?php
header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?> 

【问题讨论】:

  • cookie 创建页面是否可能被缓存?尝试每次添加一个唯一的查询字符串。
  • 我不确定,但我尝试使用 PHP 标头清除缓存,但失败了。我编辑了我的 OP 以尽量避免缓存具有相同的结果。
  • 只需在地址栏文件名后添加?abc=123即可。那应该更可靠。只需继续向123 添加一个值或使用时间戳。即使?&lt;timestamp&gt; 也可以。
  • 它修复了我的简单示例。非常好。
  • 酷。很高兴有帮助。我会把它写下来作为一个正确的答案。它也可能对其他人有所帮助。

标签: php cookies setcookie


【解决方案1】:

问题可能是浏览器正在缓存页面请求,而与服务器告诉它的操作无关。

有一个简单的技巧可以解决这个问题。向查询字符串添加一个变化的变量将使页面请求每次都是唯一的。这也将强制浏览器重新加载页面,即使在缓存时也是如此。

例如,在地址栏/页面请求中添加以下内容:

?abc=123

并且每次改变数值。或者,您甚至可以像这样使用timestamp

?<timestamp>

这将强制符合标准的浏览器每次都获取页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2017-07-30
    • 1970-01-01
    • 2015-06-23
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多