我想知道当用户点击退出时我是否可以删除我所有网站的cookie,因为我使用此功能来删除cookie但是它无法正常工作:
setcookie("user",false);
有没有办法在PHP中删除一个域的cookie?
jas*_*bar 164
从该页面获取,这将取消设置您域名的所有Cookie:
// unset cookies
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, '/');
    }
}
http://www.php.net/manual/en/function.setcookie.php#73484
pok*_*oke 40
$past = time() - 3600;
foreach ( $_COOKIE as $key => $value )
{
    setcookie( $key, $value, $past, '/' );
}
然而,更好的是记住(或存储在某个地方)哪些cookie与您的应用程序在域上设置并直接删除所有这些.
这样您就可以确保正确删除所有值.
Dou*_*oug 15
我同意上面的一些答案.我建议将"time() - 1000"替换为"1".值"1"表示1970年1月1日,确保到期100%.因此:
setcookie($name, '', 1);
setcookie($name, '', 1, '/');
提供的答案没有解决我的问题,
它没有:
我的脚本确实如此,瞧。
<?php function unset_cookie($name)
{
    $host = $_SERVER['HTTP_HOST'];
    $domain = explode(':', $host)[0];
    $uri = $_SERVER['REQUEST_URI'];
    $uri = rtrim(explode('?', $uri)[0], '/');
    if ($uri && !filter_var('file://' . $uri, FILTER_VALIDATE_URL)) {
        throw new Exception('invalid uri: ' . $uri);
    }
    $parts = explode('/', $uri);
    $cookiePath = '';
    foreach ($parts as $part) {
        $cookiePath = '/'.ltrim($cookiePath.'/'.$part, '//');
        setcookie($name, '', 1, $cookiePath);
        $_domain = $domain;
        do {
            setcookie($name, '', 1, $cookiePath, $_domain);
        } while (strpos($_domain, '.') !== false && $_domain = substr($_domain, 1 + strpos($_domain, '.')));
    }
}
它不是最漂亮/安全/最佳的解决方案,因此仅当您不知道 cookie 路径和/或 cookie 域时才使用此解决方案。或者使用这个想法来创建您的版本。
| 归档时间: | 
 | 
| 查看次数: | 133324 次 | 
| 最近记录: |