0

我将用户国家/地区存储在 cookie 中,然后根据该变量更改内容。

如果没有设置国家 cookie,那么我使用他们的 IP 来获取他们的国家代码。我还提供了一个下拉菜单,以便他们可以手动重置他们的国家/地区。

我的问题是 cookie 似乎直到页面加载后才设置。比如cookie的初始值为'US',我设置为'GB',然后echo它。尽管只是将其更改为“GB”,但仍会回显“US”,直到我刷新页面然后切换为“GB”。

这样做的问题是,例如,当访问者切换到 GB 时,它会一直停留在 US 上,直到他们再次刷新页面。

有谁知道如何解决上述问题?

谢谢

<?php
if(!isset($_COOKIE['Country'])) {
    /* Collect Country Code */
}   

if(isset($_POST['submit'])){
    $country = $_POST['country'];
    setcookie('Country', $country, time()+60*60*24*30);
    $country = $_COOKIE["Country"];
}

echo $country;
?>
4

1 回答 1

0

好吧,默认情况下,cookie 的值总是在 PHP 中的下一个页面加载时返回,原因是 cookie 值是在页面请求加载时由浏览器发送的,随后仅在下一个请求时重新发送,所以更改只反映在进入下一页请求。阅读关于 setcookie 的 PHP 手册 - h​​ttp: //php.net/manual/en/function.setcookie.php它会在第一段中告诉你这一点

从逻辑上讲,如果我正在编写此代码,我不知道您为什么首先尝试从 cookie 中读回表单值。

$country = $_COOKIE['Country'];
if isset($_POST['submit']) {
   $country = $_POST['country']; //sets up $country for current page
   setcookie('Country', $country, time()+60*60*24*30); //sets up $country for subsequent page loads
}

$country 将反映用户对页面其余部分的国家偏好,并为用户引用的任何后续页面设置 cookie 值。不要为任何代码(即 $_COOKIE['Country'])引用 cookie 超全局变量,而是将代码设置为查找 $country(局部变量)。我认为您的问题将得到解决。

于 2013-06-05T10:23:03.773 回答