PHP 服务器重定向


PHP server redirect

我一直在尝试使用服务器端重定向作为主页上的下拉菜单。我需要使用 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>

两个想法:

  1. 尝试在重定向后使用exit(0)
  2. 使用与您的 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,然后无论哪种方式都会重定向用户。

不过,您还需要该端块吗?他们总是会重定向到他们选择的城市吗?

相关文章: