2011-01-03 2 views
0

을 설정 해제 한 후 작동하지 않습니다

나는 쿠키가 초기 설정에 문제가 그러나
<?php 
class Cookie { 

    // expire time of the cookie 31 days 
    private static $_expire = '2678400'; 

    public static function set($name = null, $value = null, $expire = null) { 
     if (!empty($name)) { 
      $expire = !empty($expire) ? $expire : time() + self::$_expire; 
      if (setcookie($name, $value, $expire)) { 
       return true; 
      } 
      return false; 
     } 
     return false; 
    } 

    public static function get($name = null) { 
     if (!empty($name)) { 
      return !empty($_COOKIE[$name]) ? $_COOKIE[$name] : false; 
     } 
     return false; 
    }  

    public static function remove($name = null) { 
     if (!empty($name)) { 
      if (!empty($_COOKIE[$name])) { 
       if (setcookie($name, false, time() - self::$_expire)) { 
        unset($_COOKIE[$name]); 
        return true; 
       } 
       return false; 
      } 
      return true; 
     } 
     return false; 
    } 

} 
?> 

,

Cookie::remove('session_name'); 

하고

Cookie::set('session_name'); 

두번째 께 (SET) : 다음 제 호출하여 값을 변경하려면 쿠키를 설정하지 않습니다.

어떤 원인 일 수 있습니까?

+0

같은 뭔가가 필요 뭐가 잘못 그렇게 확신하지. print_r ($ _ COOKIE)을 사용하여 어떤 쿠키가 설정되어 있는지 확인하고 모든 설정된 쿠키로 설정된 후에 테스트 전자 메일을 보냅니다. 쿠키를 만들지 않습니다. – user398341

+0

음, 두 가지. 당신은'Session :: foo'를'Cookie :: foo'와 반대로 호출하고 있습니다 (이것은 감독일지도 모르지만, 시도해 볼 가치가 있습니다). 둘째,'$ _COOKIE'는 다음 요청시에만 채워집니다. 'setcookie'는 같은 요청에 결코 영향을 미치지 않습니다. 설정된 쿠키를 추적하려면':: set'에 대한 각 호출을 추적하십시오 ... – ircmaxell

+0

예 - 물론 세션이 아닙니다 (입력하고있었습니다) - $ _COOKIE는 다음 요청시 채워집니다. 다시로드 한 후 서버에 대한 다음 호출을 의미합니까? 그렇다면 그것을 수행하십시오 - 아래의 의견을 읽으십시오. – user398341

답변

1

쿠키 값을 바꾸고 싶다면 먼저 쿠키를 제거 할 필요가 없으므로 곧바로 Session::set('session_name');을 호출하면 쿠키가 오버레이됩니다. 더 이상 쿠키가 필요없는 경우에만 Session::remove('session_name');으로 전화하십시오.

3

쿠키가 작동하는 방식을 잘못 이해했다고 생각합니다. $_COOKIE

내용은 , HTTP 요청이 도착하면 당신의 스크립트가 실행을 시작하기 전에 설정됩니다.

setcookie을 사용하여 쿠키를 추가하거나 수정하면 서버에 HTTP 요청이있을 때까지이 추가 또는 수정이 표시되지 않습니다. 이것은 당신의 Cookie::set 방법에서 당신이하고있는 일입니다.

당신이 $_COOKIE의 내용을보고 (또는 같은 일을 Cookie::get을 사용하여)에 의해 Cookie::set을 "테스트"하는 경우에 당신은 그들이을되었습니다에도 쿠키 에 대한 변경 사항을 볼 수 없습니다.

예상치를 보려면 $_COOKIECookie::set 범위의 값을 추가해야합니다. 그러나 다른 방법으로 프로그램을 작성하는 것이 좋습니다. 당신은 정상적인 변수와 같은 쿠키를 사용하려고합니다. 쿠키 :: 설정은()가 true를 돌려 - - 언급 할 가치 - 내가 제대로 이해하면

+0

예 - Ajax를 사용하여 Cookie :: set이 호출 된 후 다시로드되며 location.reload()를 사용하여 성공적인 응답 후에 페이지가 다시로드됩니다. – user398341

0

, 당신은 또한 그

public static function set($name, $value,$expire) 
{ 
    setcookie($name, $value, $expire); 

    $_COOKIE[$name] = $value;  

} 
+0

hmm - 죄송합니다 - 확실하지 않습니다 - setcookie()를 사용하여 쿠키 인덱스가 이미 설정되어있는 경우 쿠키 인덱스에 값을 할당해야하는 이유는 무엇입니까? – user398341

+0

은 필요에 따라 다르며,이 예에서는 $ _COOKIE가 현재 요청에 채워지고 otherwis - 다음 요청이 채워집니다 – Fivell

관련 문제