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

标签 javascript php apache .htaccess cookies

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

我无法使用 RequestHeader unset Cookie 因为它只会不断删除 cookie,直到我删除它为止,我希望它能删除 2015 年 7 月 1 日之前创建的所有 cookie

我还尝试“修复”我的网站,以便浏览器记住目录/f1fol/,因为由于某种原因没有浏览器记住该页面(不确定是什么导致了问题)

有人知道怎么做/有什么问题吗?

最佳答案

事情是这样的:浏览器从不报告 cookie 的创建日期。创建 cookie 时,仅存储服务器在创建期间指定的到期日期及其值,因此,在 cookie 崩溃/到期之前,仅将其报告回服务器。

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

的 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 的过期日期设置为过去,可以强制 cookie 过期。上面的代码将其设置为昨天。

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

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

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

如果您确定您的网站从未为特定 /dir/path 设置 Cookie,即始终传递 path/,然后您可以通过将此脚本添加到 /index.php 来取消设置所有 cookie。然后,两个 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.

关于javascript - 删除(取消设置)今天之前创建的所有较旧的 cookie 并在浏览器历史记录中保留子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833500/

相关文章:

java - 谷歌云消息和 MySQL 数据库

php - Sendmail 管道到 PHP : Could not open input file

javascript - 如何使用 socket.io 设置和读取 cookie?

javascript - AngularJS : Synchronize multiple independent promises

php - 如何使用 PHP 检索带前导零的 MySQL ID

php - 使用 PHP 在 Apache 服务器中部署 WebSockets

php - 无法使用 Apache 2.4 从 PHP5 切换到 PHP7

php - undefined index HTTP_HOST 即使它被选中

javascript - 如何使用 moment.js 在用户时区上自动转换

javascript - 通过窗口名称在js中进行窗口到窗口通信