如何删除我的网站的所有cookie在php中
我想知道当用户点击注销时是否可以删除我所有网站的cookies,因为我用这个function来删除cookies,但是它不能正常工作:
setcookie("user",false);
有没有办法在PHP中删除一个域的cookie?
PHP的setcookie()
采取从该页面,这将取消您的域的所有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, '/'); } }
$past = time() - 3600; foreach ( $_COOKIE as $key => $value ) { setcookie( $key, $value, $past, '/' ); }
但更好的是要记住(或将其存储在某个地方)哪些cookie与您的应用程序一起在域中设置,并直接删除所有这些cookie。
这样,你可以确保正确删除所有的值。
我同意上面的一些答案。 我只是build议用“1”replace“time() – 1000”。 值“1”表示1970年1月1日,确保到期100%。 因此:
setcookie($name, '', 1); setcookie($name, '', 1, '/');
确保你的网站上发生任何输出之前调用你的setcookie函数。
另外,如果你的用户正在注销,你也应该删除/无效他们的会话variables。
您应该了解各种跟踪工具,例如Google Analytics(分析)也可以在您的网域上使用Cookie,如果您想在Google Analytics中使用正确的数据,则不需要将其删除。
我可以工作的唯一解决scheme是将现有的cookie设置为null。 我无法从客户端删除Cookie。
所以为了logging用户,我使用以下内容:
setcookie("username", null, time()+$this->seconds, "/", $this->domain, 0); setcookie("password", null, time()+$this->seconds, "/", $this->domain, 0);
当然这不会删除所有的cookies。
当您更改Cookie的名称时,您可能还想删除所有Cookie,但保留一个:
if (isset($_COOKIE)) { foreach($_COOKIE as $name => $value) { if ($name != "preservecookie") // Name of the cookie you want to preserve { setcookie($name, '', 1); // Better use 1 to avoid time problems, like timezones setcookie($name, '', 1, '/'); } } }
也基于这个PHP的答案
所有以前的答案都忽略了setcookie
可能已经被使用了一个明确的域名。 此外,Cookie可能已设置在更高的子域,例如,如果您在foo.bar.tar.com
域中,可能会在tar.com
设置cookie。 因此,您希望为所有可能删除Cookie的域取消设置Cookie:
$host = explode('.', $_SERVER['HTTP_HOST']); while ($host) { $domain = '.' . implode('.', $host); foreach ($_COOKIE as $name => $value) { setcookie($name, '', 1, '/', $domain); } array_shift($host); }
使用该function清除cookie:
function clearCookies($clearSession = false) { $past = time() - 3600; if ($clearSession === false) $sessionId = session_id(); foreach ($_COOKIE as $key => $value) { if ($clearSession !== false || $value !== $sessionId) setcookie($key, $value, $past, '/'); } }
如果你传递true
它将清除session
数据,否则会话数据将被保留。
Cookies存储在客户端的计算机上,因此您永远不能命令它们被删除。 你所能做的就是设置它们到期或覆盖它们。 如果这样做不够好,那么您将不得不向您的用户计算机上注入恶意木马,这违反了安全和当地法律,只能find与您的域名相关的cookies,然后删除这些cookie。