我想知道是否有可能避免重定向以下问题。
的index.php
$select = new select();
if(!isset($_COOKIE['country']) || !isset($_COOKIE['language'])){
$select->firstTime();
$content = $select->clients(); // this will get clients according to the cookies
}
firstTime
public function firstTime(){
$ip = $_SERVER['REMOTE_ADDR'];
$xml = simplexml_load_file("http://freegeoip.net/xml/$ip");
$locale = $xml->CountryCode;
$country_f = "us"; // default
$locale_f = "en_US"; // default
/*
++ Select country from database according to the locale
$country_f = $variable_database
*/
setcookie('language', $locale_f, time() + (60*60*24*365), '/');
setcookie('country', $country_f, time() + (60*60*24*365), '/');
header('location: redirect.php');
exit();
}
redirect.php
header('location: index.php'); exit(); // back to index.php
嗯,问题是:当用户第一次进入页面时它没有cookie,所以我检查他的ip并设置cookie。但是,如果用户没有刷新页面,他将看到默认语言/国家(英语/美国)的页面内容,因此我进行此重定向以强制内容根据用户位置显示。
代码$content = $select->clients(); // this will get clients according to the cookies
将根据他的cookie选择客户端。如果我删除redirect
代码,客户端将被选为默认的英语/美国,不应该因为cookie已经存储了函数firstTime()。
功能$select->clients()
读取 AFTER $select->firstTime()
,为什么不检测Cookie?
客户端
list($id_country, $id_language) = $this->get_country_language();
/*
... SELECT * FROM clients WHERE id_country = $id_country
*/
get_country_language
public function get_country_language(){
$id_country = 2; // United States
$id_language = 1; // English
if(isset($_COOKIE['country'])){
$id_country = $this->get_country_from_code($_COOKIE['country']);
}
if(isset($_COOKIE['language'])){
$id_language = $load->get_language_from_code($_COOKIE['language']);
}
return array($id_country, $id_language);
}
我尽力做到最明确。我只是问是否有可能在没有重定向的情况下这样做?因为谷歌说要避免重定向..当我用google pagespeed分析我的页面时,它也会说。
您的网页有2个重定向。重定向会引入额外的延迟 在页面加载之前。 mywebsite.com /
mywebsite.com/redirect.php
mywebsite.com/index.php
答案 0 :(得分:0)
而不是redirect和exit()为什么不返回数组($ locale_t,$ id language);
答案 1 :(得分:0)
setcookie在用户浏览器上设置cookie信息,但是当前的cookie信息仅在脚本开头加载。
重定向/刷新确实是我相信的唯一方法。
答案 2 :(得分:0)
也许你可以试试这样的事情
public function get_country_language(){
$id_country = 2; // United States
$id_language = 1; // English
$ids = array();
if(isset($_COOKIE['country']) && isset($_COOKIE['language'])){
$id_country = $this->get_country_from_code($_COOKIE['country']);
$id_language = $load->get_language_from_code($_COOKIE['language']);
$ids = array($id_country, $id_language);
}
else{
$ids = $this->firstTime();
}
return $ids;
}
public function firstTime(){
$ip = $_SERVER['REMOTE_ADDR'];
$xml = simplexml_load_file("http://freegeoip.net/xml/$ip");
$locale = $xml->CountryCode;
$country_f = "us"; // default
$locale_f = "en_US"; // default
/*
++ Select country from database according to the locale
$country_f = $variable_database
*/
setcookie('language', $locale_f, time() + (60*60*24*365), '/');
setcookie('country', $country_f, time() + (60*60*24*365), '/');
return array($country_f, $locale_f);
}
...之后你可以解析内容。