删除(取消设置)所有在今天之前创建的较旧的 cookie 并使子目录保留在浏览器历史记录中?

Removing (unset) all cookies that are older that were created before today & making a subdirectory keep in browser history?

我正在尝试从我的网站中删除今天之前创建的所有 cookie...以便返回该网站的任何人都将丢失他们所有的旧 cookie 并获得一组新的 cookie。

我不能使用 RequestHeader unset Cookie 因为它会一直删除 cookie 直到我删除它,我想要它所以它会删除 2015 年 7 月 1 日之前制作的所有 cookie

我也在尝试 "fix" 我的网站,以便浏览器记住目录 /f1fol/ 因为出于某种原因没有浏览器记住该页面(不确定是什么导致了问题)

有谁知道 this/what 的问题吗?

在PHPsetcookie函数中,可以设置cookie的过期时间。如果你想让它今天过期,你可以试试这样的方法:

setcookie('var', 'value', strtotime(date('Y-m-d 23:59:59'));

这将使它在当天的最后一秒过期。您可以像这样检查 cookie 是否存在:

if (isset($_COOKIE['var'])) {
   //do something with it
} else {
   //store cookie var and do something else
}

如果您需要将目录路径保存更长的时间,您可以将过期时间设置为一个遥远的未来日期。

事情是这样的:浏览器从不报告 cookie 的创建日期。创建 cookie 时,只有服务器在其创建期间指定的到期日期与其值一起存储,因此,只有在 cookie crumbles/expires.

之前将其报告回服务器。

但是,您想要的最终效果,即任何返回该站点的人都应该丢失他们所有的旧 cookie 并获得一组全新的 cookie 是可以实现的。将以下代码添加到名为 PHP 的包含文件中,例如,purge_old_cookies.php

<?
// Check if this script has run before
if (!isset($_COOKIE['purged_once'])) {

  // Check for old cookies
  if (isset($_SERVER['HTTP_COOKIE'])) {

    $cookies = explode(";", $_SERVER['HTTP_COOKIE']);

    // Iterate and unset all cookies
    foreach ($cookies as $cookie) {

      $fields = explode("=", $cookie);
      $name = trim(fields[0]);

      // unset any cookie for the current path
      setcookie($name, "", time() - 3600);

      // unset the cookie for the root path
      setcookie($name, "", time() - 3600, "/");
    }
  }

  // Set a purged marker for the current path
  setcookie("purged_once", "1", strtotime("+6 months"));
}
?>

通过设置过去的过期日期强制 cookie 过期。上面的代码将它设置为昨天。

注意,setcookie() 方法被触发两次,因为必须使用与设置时相同的参数删除 cookie。在大多数情况下,以上内容就足够了,但如果您的站点设置了具有不同 domainsecurehttponly 参数的 cookie,您可能还必须传递它们。

以上脚本准备就绪后,只需将其包含在所有必需页面的开头即可。

<?
  include '/path/to/purge_old_cookies.php';
  ...
?>

如果您确定您的站点从未为特定 /dir/path 设置 cookie,即始终传递 path/,那么您可以通过以下方式取消设置所有 cookie将此脚本添加到 /index.php。两个 setcookie() 调用(有和没有 /)然后实际上变得相同,你可以放弃一个。 purged_once cookie 也将在 root 上设置为

setcookie("purged_once", "1", strtotime("+6 months"), "/");

这也会将标记 cookie 限制为每个用户一个。

请注意:

Keep the marker purged_once cookie set to expire after a long time like 3 to 6 months. If you keep it very low and forget to remove the script, you'll end up purging all the new cookies your site sets from the time this script was introduced.

可能来自 PHP,您也可以从 javascript 更改 cookie 的生命周期。您可以简单地读取 cookie,如果日期小于您想要的时间,则删除 cookie。more