在不知道路径的情况下删除所有域cookie

时间:2017-03-30 20:14:22

标签: javascript php cookies

我不小心设置了一些我不应该拥有的饼干。例如,我的cookie被称为“lang”,我的错误是没有设置域,也没有设置cookie的路径。因此,浏览器使用默认值创建了cookie,这意味着访问我网站“产品”页面的用户最终得到了一个cookie:

Name        Value        Domain        Path
lang        en           example.com   /products/

实际上,cookie应该是:

Name        Value        Domain        Path
lang        en           example.com   /

糟糕的代码存在了一段时间,这意味着cookie的路径碰巧是用户访问的任何页面。

我的问题是,我是否可以在不知道路径的情况下删除example.com域下的所有Cookie?

我在JS和PHP中都尝试过,但没有传递cookie的路径,浏览器拒绝删除它。鉴于坏代码存在多长时间,可能有数千条路径。这么多路径的原因是因为大多数用户来自Google,因此他们直接登陆example.com/products/a-product这样的网页,这意味着Cookie的路径将为/products/a-product

谢谢

1 个答案:

答案 0 :(得分:0)

以下是PHP中可能的解决方案......我们只是通过更改到期时间来取消设置cookie。请报告documentation

删除所有Cookie

if (isset($_SERVER['HTTP_COOKIE'])) {
    // We get the server cookies
    $server_cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    // We set the expiration time
    $expiration_time = time() - 3600;
    // And the default _path
    $default_path = '/';

    foreach ($server_cookies as $cookie) {
        // We explode given cookie in order to simply get the cookie name
        $all_parts = explode('=', $cookie);
        // We get the cookie name
        $name = trim($all_parts[0]);

        // We set the expiration time & empty the value
        setcookie($name, '', $expiration_time);

        // We set the path, empty the value and set the expiration time
        setcookie($name, '', $expiration_time, $default_path);
    }
}

当我们知道其名称和时,删除特定的cookie。信息

// We set the cookie name we wand to delete
$name = 'lang'; // According to OP
// We set the path of the cookie
$path = '/products/';
// We set the domain of the cookie
$domain = 'exemple.com';
// We set the expiration time
$expiration_time = time() - 3600;

// We set the expiration time & empty the value
setcookie($name, '', $expiration_time);
// We set the path, empty the value and set the expiration time
setcookie($name, '', $expiration_time, $path, $domain);