2012-01-08 2 views
1

나는이 코드를 사용자가 선택한 도시를 기억할 수 있도록 캐시 시스템 유형을 위해 노력하고 있습니다. 사용자가 도시를 선택한 경우 세션과 쿠키에 도시를 저장하고 이전에 도시 페이지로 리다이렉트합니다. ...setcookie가 작동하지 않는 빈 값으로

세션은 잘 작동하지만,이 $ _GET [ '도시'] 변수가 빈 상태 (empty)의 경우 빈 값으로 쿠키를 설정하지 않는 것

을 heres 내 코드 :

function gen_url ($city) 
{ 
    $url = 'http://www.mysite.com'; 

    if (!empty($city)) $url .= "/c-$city"; 

    return $url; 
} 

function set_cache ($variable, $value) 
{ 
    $_SESSION[$variable] = $value; 
    setcookie($variable, $value, time() + 31536000); 
} 

$redirect = false; 
$redirect_array['city'] = ''; 

if (!empty($_GET['city'])) 
{ 
    $sql = mysql_query("select * from `cities` where `slug`='".mysql_real_escape_string($_GET['city'])."'"); 

    if (mysql_num_rows($sql) != 0) 
    { 
     while ($row = mysql_fetch_assoc($sql)) 
     { 
      foreach ($row as $k => $v) 
       $city[$k] = $v; 
     } 

     $redirect_array['city'] = $city['slug']; 
    } 
    else 
    { 
     $redirect = true; 
    } 
} 

if ($redirect) 
{ 
    header('Location: '.gen_url($redirect_array['city']); 
    die(); 
} 

set_cache('city', $redirect_array['city']); 

답변

4

당신은 빈 문자열과 함께 쿠키를 설정할 수 없습니다. docs에서

:

값 인수가 빈 문자열 또는 FALSE이고, 다른 모든 인자가 이전의 setcookie 호출과 일치하는 경우, 지정된 이름의 쿠키가 삭제됩니다 원격 클라이언트

+0

답장을 보내 주셔서 감사합니다. 내가 찾은 PHP의 모든 버전 (5.6.10 참고)은 http://stackoverflow.com/q/37464332/469643에서 정확하지 않습니다. 일부 버전에서는 공백 값 **을 설정하면 ** 성공하고 문서에서는 ** 이전 호출 **이없는 경우 어떤 일이 발생해야하는지 명확하게 알 수 없습니다. 더 깊은 통찰력을 갖고 있다면 내 질문에 여전히 답이 필요합니다. – veeTrain

0

는 음의 시간으로 쿠키를 설정해야합니다 : 그것은 쿠키를 삭제로

setcookie($variable, '', -1); 
1

trit 쿠키의 허위를 나타 내기 위해 대부분의 위변조 값으로 쿠키를 설정할 수 없습니다. '0' 만 작동합니다. 그것을 사용하십시오.

관련 문제