답변:
당신은 이것을 시도 할 수 있습니다
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
. 제거해도 아무런 변화가 없습니다.
unset($_COOKIE['Hello']);
코드의 뒷부분에서 쿠키를 확인하려면 @machineaddict 가 실제로 중요합니다.
값을 ""로 설정하고 만료 날짜를 어제 (또는 과거의 날짜)로 설정하십시오.
setcookie("hello", "", time()-3600);
그러면 다음에 페이지가로드 될 때 쿠키가 만료됩니다.
쿠키를 삭제하는 확실한 방법은 $_COOKIE
값과 브라우저 쿠키 파일을 모두 지우는 것입니다 .
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
호출에도 경로를 포함시켜야합니다 .setcookie('key', '', time() - 3600, '/');
unsetting
성공적이었습니다.
null
를 사용해야 합니다. null
isset()
쿠키를 안정적으로 삭제하려면 PHP 서버에서 계산 한 것처럼 쿠키가 과거에 언제라도 만료되도록 설정하는 것만으로는 충분하지 않습니다. 이는 클라이언트 컴퓨터가 서버와 다른 시간을 가질 수 있고 종종 있기 때문입니다.
가장 좋은 방법은 일초 만료 빈 쿠키와 현재의 쿠키를 덮어하는 것입니다 미래를 , 신기원 이후로 이렇게 (1970년 1월 1일 0시 0 분 0 초 UTC)를 :
setcookie("hello", "", 1);
그러면 코드에서 쿠키가 설정 해제되지만 각 요청마다 $ _COOKIE 변수가 새로 고쳐 지므로 다음 페이지 요청에서 다시 나타납니다.
실제로 쿠키를 제거하려면 과거에 만료 날짜를 설정하십시오.
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
unset()
쿠키 가 필요하지 않습니까?
내 코드에서 동일한 문제가 발생하여 쿠키 경로 문제라는 것을 알았습니다. 이 스택 오버플로 게시물을 확인하십시오 : PHP 세트 쿠키를 삭제할 수 없습니다
"/"의 경로 값을 사용하여 쿠키를 설정했지만 지우려고 할 때 경로 값이 없으므로 지워지지 않았습니다. 다음은 작동 한 예입니다.
쿠키 설정 :
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
쿠키 지우기 :
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
희망이 도움이됩니다.
쿠키가 과거에 만료되도록 설정 한 경우 브라우저가 쿠키를 제거합니다. php.net에서 setcookie () 삭제 예제를 참조하십시오
PHP 문서에서 " Example # 2 setcookie () delete example " 이라는 샘플을 참조하십시오 . 브라우저에서 쿠키를 지우려면 쿠키가 만료되었음을 브라우저에 알려야합니다. 그러면 브라우저가 쿠키를 제거합니다. unset
사용 했으므로 COOKIE 배열에서 'hello'쿠키를 제거합니다.
다음은 PHP v7 setcookie () 코드가 작동하는 방식입니다.
<?php
setcookie('user_id','');
setcookie('session','');
?>
포트 80에서 스니핑하는 동안 tcpdump의 출력에서 서버는 다음 HTTP 헤더를 클라이언트 (브라우저)로 보냅니다.
Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
다음 요청에서 패킷을 관찰하면 브라우저가 더 이상 헤더에 쿠키를 보내지 않습니다.
쿠키를 삭제하려면 값을 NULL로 설정하면됩니다.
"만료 시간, 경로 또는 도메인에 기본값이 아닌 쿠키를 설정 한 경우 쿠키를 삭제하면 쿠키가 올바르게 삭제되도록 동일한 값을 다시 제공해야합니다." "PHP5 배우기"책에서 인용하십시오.
따라서이 코드는 작동해야합니다 (작동합니다).
쿠키 설정 :
setcookie('foo', 'bar', time() + 60 * 5);
쿠키 삭제 :
setcookie('foo', '', time() + 60 * 5);
그러나 나는 모두가 만료 날짜를 과거로 설정하고 있음을 알았습니다.
''
동일하지 않습니다 null
.
쿠키를 "제거"하려면 다음과 같이 만료 날짜를 1 시간 전에 설정하십시오.
setcookie ("TestCookie", "", time() - 3600);
또는
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
출처 : http://www.php.net/manual/en/function.setcookie.php
filter_input()
방문자가 다음과 같이 입력 / 조작 할 수있는 모든 전역에 대해이 기능을 사용해야합니다 .
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
자세한 내용은 여기를 참조하십시오. http://www.php.net/manual/en/function.filter-input.php 및 여기를 참조 하십시오 : http://www.w3schools.com/php/func_filter_input.asp
나는이 주제가 만들어진 이후 오랜 시간이 걸렸지만이 솔루션 내에서 약간의 실수를 보았습니다 (세부 사항이므로 그렇게 부를 수 있습니다). 더 나은 솔루션은 아마도이 솔루션이라는 데 동의합니다.
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
그러나 현재는 설정 해제 기능이 작동하는 모든 경우에 쿠키를 삭제하고 설정 해제 기능이 작동하지 않는 경우 만료 된 새 쿠키를 즉시 생성합니다.
즉, 설정 해제 기능이 작동하더라도 컴퓨터에는 여전히 쿠키가 2 개 있습니다. 논리적 관점에서 요구되는 목표는 쿠키가 가능하면 쿠키를 삭제하고 쿠키가 실제로 쿠키가 아닌 경우 쿠키를 삭제하는 것입니다. "가장 깨끗한"결과를 얻을 수 있습니다.
그래서 우리는 더 잘해야한다고 생각합니다.
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
감사하고 좋은 하루 되세요 :)
$cookie_name = "my cookie";
$cookie_value = "my value";
$cookie_new_value = "my new value";
// Create a cookie,
setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds
// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];
// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");
// Delete a cookie,
setcookie($cookie_name, '' , time() - 3600, "/"); // time() - 3600 means, set the cookie expiration date to the past hour.
0
시간 을 입력 하면 브라우저에 대해 "지금" (지금부터 +0이 실제로 나타남) 을 의미 하며 쿠키가 삭제됩니다.
setcookie("key", NULL, 0, "/");
크롬 브라우저에서 확인하여 다음을 제공합니다.
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
서버의 php 및 브라우저의 js를 사용하여 쿠키를 삭제해야합니다. (php로 만들었지 만 쿠키 파일은 브라우저 클라이언트에도 있습니다) :
예를 들면 :
if ($_GET['action'] == 'exit'){
// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
대부분은 로컬 컴퓨터에서만 작동한다는 사실을 잊고 있습니다. 도메인에서는이 예제와 같은 패턴이 필요합니다.
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
setcookie
localhost 여부에 관계없이 모든 도메인에서 작동합니다.
$cookie->delete()
에서 github.com/delight-im/PHP-Cookie 도움. 질문의 코드는 서버 측에서 구문 분석 된 속성을 삭제합니다. 쿠키는 여전히 클라이언트쪽에 있습니다.