我有一个使用两种语言的网站:英语和法语。我想根据他们的浏览器语言来重定向人:如果浏览器语言是法语,我将在上重定向人/fr
,否则他们将转到常规站点(即,不重定向)。
为了做到这一点,我首先使用了一个PHP会话(带有PHP函数session_start
),并且运行良好。但是会话的问题在于您无法控制将cookie绑定到会话的时间(我读到会话直到关闭浏览器才结束,但是在我的情况下它不起作用:会话的cookie是当我关闭并再次打开浏览器时,它仍然存在)。因此,我决定使用cookie(setcookie
代替PHP函数)来控制其持续时间。因此,我修改了先前为该会话制作的代码(正在运行)以使用该setcookie
函数:
// If the cookie "first_time" is not defined, we define it
// and do the redirection if the browser language is French,
// else we do nothing.
// In this case, we only redirect (or not) the first time we go on the website,
// which is exactly what we want.
if( !isset($_COOKIE["first_time"]) ){
$browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
setcookie("first_time", "", time()+3600, "/", "", 0);
if ($browser_lang == "fr") {
header("Location: /fr");
}
}
但是,我收到了一个Firefox错误消息:
页面未正确重定向。Firefox已检测到服务器正在以永远无法完成的方式重定向对该地址的请求。有时可能是由于禁用或拒绝接受Cookie引起的。
问题是当我使用PHP会话进行重定向时,没有此错误。而且,当我执行下面的代码(没有按照我的意愿做)时,我也没有问题(发生重定向):
if( !isset($_COOKIE["flag"]) ){
$browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
setcookie("flag", "0", time()+30, "/", "", 0);
}
else {
if ($_COOKIE["flag"] == "0") {
header("Location: /fr");
setcookie("flag", "1", time()+30, "/", "", 0);
}
}
我有两个问题:
setcookie
必须等待页面重新加载,这样我才能使用$_COOKIE
(来自PHP手册:“一旦设置cookie,就可以在下一次访问cookie时访问cookie值。使用$ _COOKIE数组加载页面”),但是使用会话Cookie,我可以立即使用$_SESSION
?访问其变量?任何帮助将不胜感激。
尝试:
if( !isset($_COOKIE["first_time"]) ){
$browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
setcookie("first_time", "1", time()+3600, "/", "", 0);
if( !isset($_COOKIE["first_time"]) ){
header("Reload:0");
}
if ($browser_lang == "fr") {
header("Location: /fr");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句