2012-01-08 3 views
1

私はこのコードを持っているので、ユーザが選択した都市を記憶するようにキャッシュシステムのタイプをしようとしています。ユーザーが都市を選択した場合、セッションやクッキーに保存されます。以前に選択した都市ページに自動的にリダイレクトされます。setcookieが空の値になっていない

セッションが正常に動作しますが、$ _GET [「都市」]変数が空である場合には、空の値にCookieを設定していないようです...

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

トリットクッキーの偽りを示すために、ほとんどの偽値にクッキーを設定することはできません。 '0'だけが動作します。それを使用してください。

関連する問題