php에서 내 웹사이트의 모든 쿠키를 삭제하는 방법
사용자가 로그아웃을 클릭했을 때 웹 사이트의 쿠키를 모두 삭제할 수 있는지 궁금합니다. 쿠키를 삭제하는 기능으로 사용했지만 제대로 작동하지 않습니다.
setcookie("user",false);
PHP에서 한 도메인의 쿠키를 삭제하는 방법이 있습니까?
이 페이지에서 가져오면 도메인에 대한 모든 쿠키가 설정 해제됩니다.
// 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
$past = time() - 3600;
foreach ( $_COOKIE as $key => $value )
{
setcookie( $key, $value, $past, '/' );
}
다만, 도메인상의 애플리케이션으로 설정되어 있는 쿠키를 기억하고(또는 어디에 보존하고) 모든 쿠키를 직접 삭제하는 것이 좋습니다.
그러면 모든 값을 올바르게 삭제할 수 있습니다.
위의 답변 중 몇 가지에 동의합니다.time()-1000을 1로 대체할 것을 권장합니다.값 "1"은 1970년 1월 1일을 의미하며, 이는 100% 유효기간을 보장합니다.그 때문에,
setcookie($name, '', 1);
setcookie($name, '', 1, '/');
제공된 답변으로는 문제가 해결되지 않았습니다.
그렇지 않다:
- 부모 도메인 쿠키 삭제(a.b.c에서, b.c에서, cookie 삭제),
- 루트가 아닌 상위 경로에서 쿠키를 제거합니다.
내 대본은 그래, 봐봐.
<?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-path 및/또는 cookie-domain을 모르는 경우에만 사용하십시오.또는 아이디어를 사용하여 버전을 만듭니다.
사이트에서 출력이 발생하기 전에 반드시 setcookie 함수를 호출하십시오.
또한 사용자가 로그아웃하는 경우 세션 변수도 삭제/재인증해야 합니다.
쿠키 이름을 변경할 때 모든 쿠키를 삭제하되 하나는 보존할 수도 있습니다.
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-Answer를 기반으로 합니다.
Google Analytics와 같은 다양한 추적 도구도 도메인에서 쿠키를 사용하며 GA에 올바른 데이터를 보관하려면 해당 쿠키를 삭제하지 않습니다.
내가 할 수 있는 유일한 해결책은 기존 쿠키를 null로 설정하는 것이었다.클라이언트에서 쿠키를 삭제할 수 없었습니다.
따라서 사용자를 로그아웃하려면 다음을 사용합니다.
setcookie("username", null, time()+$this->seconds, "/", $this->domain, 0);
setcookie("password", null, time()+$this->seconds, "/", $this->domain, 0);
물론 이것으로 모든 쿠키가 삭제되는 것은 아닙니다.
지금까지의 모든 답변에서는setcookie
명시적 도메인과 함께 사용되었을 수 있습니다.또한 cookie는 상위 서브도메인에 설정되어 있을 수 있습니다.예를 들어, 예를 들어, cookie는foo.bar.tar.com
되어 있을 수 .tar.com
따라서 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 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
그렇지 않으면 세션 데이터가 보존됩니다.
이 질문이 오래되었다는 것은 알지만, 이것이 훨씬 더 쉬운 대안입니다.
header_remove();
하지만 조심하세요!문서에 설명된 대로 쿠키, 세션 등을 포함한 모든 헤더가 지워집니다.
<?php
parse_str(http_build_query($_COOKIE),$arr);
foreach ($arr as $k=>$v) {
setCookie("$k","",1000,"/");
}
삭제되지 않는 쿠키를 실제로 제거하려면 상위 답변에 다음 항목을 추가해야 했습니다.
foreach($_COOKIE as $cook) {
setcookie($cook, '', time()-1000);
setcookie($cook, '', time()-1000, '/');
}
언급URL : https://stackoverflow.com/questions/2310558/how-to-delete-all-cookies-of-my-website-in-php
'source' 카테고리의 다른 글
Python 문자열이 ASCII로 되어 있는지 확인하는 방법 (0) | 2022.11.04 |
---|---|
JavaScript의 .trim()이 IE에서 작동하지 않음 (0) | 2022.11.04 |
오류 수정 방법: laravel.log를 열 수 없습니다. (0) | 2022.10.25 |
자연어 처리를 위한 Java 또는 Python (0) | 2022.10.25 |
Brew를 통해 MySQL을 설치한 후 PID 파일을 업데이트하지 않고 서버가 종료되었습니다.라는 오류가 나타납니다. (0) | 2022.10.25 |