我有这个代码我试图为一种缓存系统做,所以它记住用户选择的城市。如果用户选择了一个城市,则会将其存储在会话和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']);
答案 0 :(得分:5)
您无法使用空字符串设置Cookie,因为它会删除Cookie。
来自docs:
如果value参数是空字符串,或者为FALSE,则为所有其他字符串 参数匹配上一次调用setcookie,然后使用 指定的名称将从远程客户端删除。
答案 1 :(得分:2)
您无法将cookie设置为大多数假值,以指示trit cookie的错误。只有'0'
才有效。使用它。
答案 2 :(得分:1)
PHP的setcookie()不允许您将Cookie设置为空值。但是您可以使用header()
替换:
setcookie($variable, $value, time() + 31536000);
具有:
header('set-cookie: '.rawurlencode($variable).'='.rawurlencode($value).'; max-age=31536000', false);
答案 3 :(得分:0)
确保将Cookie设置为负时间:
setcookie($variable, '', -1);
答案 4 :(得分:0)
您可以使用空指针作为Cookie的值来设置空值
像这样:
setrawcookie('testEmptyCookie', "\x00", time() + 3600, '/');
(在5.6、7.2版上尝试)