我想知道当用户点击退出时我是否可以删除我所有网站的cookie,因为我使用此功能来删除cookie但是它无法正常工作:
setcookie("user",false);
Run Code Online (Sandbox Code Playgroud)
有没有办法在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, '/');
}
}
Run Code Online (Sandbox Code Playgroud)
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, '/' );
}
Run Code Online (Sandbox Code Playgroud)
然而,更好的是记住(或存储在某个地方)哪些cookie与您的应用程序在域上设置并直接删除所有这些.
这样您就可以确保正确删除所有值.
Dou*_*oug 15
我同意上面的一些答案.我建议将"time() - 1000"替换为"1".值"1"表示1970年1月1日,确保到期100%.因此:
setcookie($name, '', 1);
setcookie($name, '', 1, '/');
Run Code Online (Sandbox Code Playgroud)
提供的答案没有解决我的问题,
它没有:
我的脚本确实如此,瞧。
<?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, '.')));
}
}
Run Code Online (Sandbox Code Playgroud)
它不是最漂亮/安全/最佳的解决方案,因此仅当您不知道 cookie 路径和/或 cookie 域时才使用此解决方案。或者使用这个想法来创建您的版本。