我将用户所在国家/地区存储在Cookie中,然后根据该变量更改内容。
如果国家/地区Cookie未设置,则我使用其IP来获取其国家/地区代码。 我还提供了一个下拉菜单,以便他们可以手动重置他们的国家。
我的问题是,在页面加载之前,cookie似乎没有设置。 例如,cookie的初始值为“US”,我将其设置为“GB”然后回显它。 “美国”尽管只是将其更改为“GB”,但在我刷新页面然后切换到“GB”之前就会得到回应。
问题在于,当访问者切换到GB时,它会一直停留在美国,直到他们再次刷新页面。
有谁知道如何解决上述问题?
谢谢
<?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;
?>
答案 0 :(得分:0)
嗯,默认情况下,cookie的值总是在PHP中的下一页加载中返回,原因是当页面请求加载时,浏览器会发送cookie值,随后只会在下一个请求中重新发送,所以更改仅反映下一页请求进入时。阅读setcookie上的PHP手册 - http://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(本地变量)。我认为你的问题将会得到解决。