2012-01-08 36 views
1

我有这个代码即时尝试做一种类型的缓存系统,因此它会记住用户选择的城市。如果用户选择了一个城市,它将其存储在会话和cookie中,并且如果他们之前选择了该城市,则会自动将其重定向到城市页面。setcookie空值不工作

会议做工精细,但它似乎并没有cookie被设置为空值,如果$ _GET [“城市”]变量是空的...

继承人我的代码:

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

你不能设置一个cookie与一个空字符串,因为它会删除cookie。

docs

如果值参数为空字符串,还是假的,和所有其他 参数匹配前面调用的setcookie,然后用 指定名称的cookie将被从删除远程客户端。

+0

谢谢你的回答。在每一个PHP版本(见5.6.10)中都是不正确的,因为我在这里发现并报告了这些内容:http://stackoverflow.com/q/37464332/469643。在某些版本中,设置一个空值**将会成功**,并且文档没有说明如果没有以前的调用**会发生什么*应该发生。如果您有更深入的见解,我的问题仍然需要一个答案 – veeTrain 2016-06-06 13:48:25

0

确保使用负时间设置您的Cookie:

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

您不能将cookie设置为最虚假值来指示Trit cookie的错误。只有'0'将工作。使用它。