存储cookie和引用变量


Storing cookies and referencing variables

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

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

我的问题是,cookie似乎没有设置,直到页面加载后。例如,cookie的初始值是"US",我将其设置为"GB",然后回显它。'US'虽然只是更改为'GB',但在我刷新页面之后,它会切换为'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;
?>

默认情况下,cookie的值总是在PHP的下一个页面加载中返回,原因是cookie值是在页面请求加载时由浏览器发送的,并且随后只在下一个请求中重新发送,因此更改仅反映在下一个页面请求进入时。阅读setcookie - http://php.net/manual/en/function.setcookie.php的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(本地变量)。我想这样你的问题就解决了。