setcookie为空值不起作用

sca*_*and 2 php cookies

我有这段代码我正在尝试为某种类型的缓存系统执行操作,因此它可以记住用户选择的城市。如果用户选择了城市,则将其存储在会话和Cookie中,如果用户之前已选择城市,则会自动将其重定向到城市页面。

会话工作正常,但是如果$ _GET ['city']变量为空,则似乎没有将cookie设置为空值...

这是我的代码:

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']);
Run Code Online (Sandbox Code Playgroud)

Ric*_*ams 5

您不能将Cookie设置为空字符串,因为它将删除Cookie。

文档

如果value参数是一个空字符串或FALSE,并且所有其他参数都与对setcookie的先前调用匹配,则具有指定名称的cookie将从远程客户端中删除。