我一直在尝试使用服务器端重定向作为主页上的下拉菜单。我需要使用 cookie 记住所选选项,以便它重定向到上次访问的选项本身。
这就是我到目前为止所做的,但无法弄清楚我在哪里做错了。
<?php
if (isset($_POST['submitted'])){
$newcity=$_POST['city'];
#set cookies
setcookie("city",$newcity,time()+22896000);
}
if ((!isset($_COOKIE['city']) )){
$city = "";
}
else{
header("location:http://example.com/".$_COOKIE['city']."");
}
?>
<form action= "<?php echo $_SERVER['PHP_SELF']; ?>" method ="POST">
<select name="city">
<option value ="toronto">Toronto</option>
<option value ="ottawa">Ottawa</option>
<option value ="kingston">Kingston</option>
</select>
<input type="submit" name="submitted" value="Submit">
</form>
<?php
if (isset($_POST['submitted'])){
$newcity = $_POST['city'];
setcookie("cookie_city", $newcity, time()+22896000);
}
if ((!isset($_COOKIE['cookie_city']))){
$city = "";
} else{
header("Location: http://example.com/".$_COOKIE['cookie_city']);
exit(0); // <<< Try this
}
?>
<form action= "<?php echo $_SERVER['PHP_SELF']; ?>" method ="POST">
<select name="city">
<option value ="toronto">Toronto</option>
<option value ="ottawa">Ottawa</option>
<option value ="kingston">Kingston</option>
</select>
<input type="submit" name="submitted" value="Submit">
</form>
两个想法:
- 尝试在重定向后使用
exit(0)
。 - 使用与您的 POST 和 GET 变量不同的 cookie 名称。也许您的服务器以某种方式配置了覆盖POST,GET和cookie。
您的问题之所以存在,是因为您无法在设置它的同一页面上访问 Cookie 值。因此,为什么它仅在您重新加载页面时才有效。
您最好在 cookie 设置后立即重定向它们:
if (isset($_POST['submitted'])){
$newcity = $_POST['city'];
setcookie("cookie_city", $newcity, time()+22896000);
die(header("Location: http://example.com/".$new_city));
}
if ((!isset($_COOKIE['cookie_city']))){
$city = "";
} else{
header("Location: http://example.com/".$_COOKIE['cookie_city']);
exit(0); // <<< Try this
}
这样,您将设置cookie,然后无论哪种方式都会重定向用户。
不过,您还需要该端块吗?他们总是会重定向到他们选择的城市吗?