PHP设置COOKIE后页面一直刷新
PHP page keeps refreshing after COOKIE is set
下面的代码是我php页面中的第一个代码。
$current_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if(isset($_REQUEST["lang"])){ //check if different language was selected
$lang = $_REQUEST["lang"];
if($lang == "eng"){
$lang_value = 1;
}else{
$lang_value = 0;
}
setCookie('language',$lang);
setCookie('language_value',$lang_value);
header("Refresh:0; url=".$current_link);
}else{ //if different language was not selected, check if cookie is set with language value
if(isset($_COOKIE["language"])){
$lang = $_COOKIE["language"];
$lang_value = $_COOKIE["language_value"];
}else{ //if cookie with language value is not set, create it now with default language option
setCookie('language','eng');
setCookie('language_value',1);
header("Refresh:0; url=".$current_link);
}
}
访客只能选择两种语言中的一种。如果选择了一种语言,则会创建具有所选语言值的 cookie。
如果未选择语言,脚本会检查是否存在具有该语言值的 cookie,如果存在,则访问 cookie 值。如果具有该语言值的 cookie 不存在,则会创建具有默认语言(英语)值的 cookie。
页面应该只在创建 cookie 时刷新,如果具有语言值的 cookie 存在,则继续执行其余代码。但是,即使在创建 cookie 并且可以访问之后,该页面也会继续刷新。例如:
echo $_COOKIE["language"]; //will output the selected language value
不确定这里的逻辑是否有问题,但我们将不胜感激。
谢谢
您需要为 cookie 添加过期时间和路径:
setCookie('language',$lang, time() + (86400 * 30), "/"); // 86400 = 1 day
对页面的每个请求都会运行这部分:
if(isset($_REQUEST["lang"])){
这意味着由于您的代码的无条件部分,页面将被刷新:
header("Refresh:0; url=".$current_link);
您可能想要做的是删除第一个页眉部分,只保留文本中所述的页眉部分。
它看起来像这样:
$current_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if(isset($_REQUEST["lang"])){ //check if different language was selected
$lang = $_REQUEST["lang"];
if($lang == "eng"){
$lang_value = 1;
}else{
$lang_value = 0;
}
setCookie('language',$lang);
setCookie('language_value',$lang_value);
#header("Refresh:0; url=".$current_link); ### Removing this line
}else{ //if different language was not selected, check if cookie is set with language value
if(isset($_COOKIE["language"])){
$lang = $_COOKIE["language"];
$lang_value = $_COOKIE["language_value"];
}else{ //if cookie with language value is not set, create it now with default language option
setCookie('language','eng');
setCookie('language_value',1);
header("Refresh:0; url=".$current_link);
}
}
我解开了这个谜。
问题出在 .htaccess 文件设置中,例如:
RewriteRule diploma-golf course.php?lang=eng&courseid=15 [NC])
因为我只看到了url末尾的'diploma-golf'部分,没想到每次刷新页面都传递了"lang"值。所以因为脚本每次都收到 "lang" 值,所以每次都会创建一个新的 cookie,导致无限刷新。更改了 if 语句逻辑,现在一切正常。
下面的代码是我php页面中的第一个代码。
$current_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if(isset($_REQUEST["lang"])){ //check if different language was selected
$lang = $_REQUEST["lang"];
if($lang == "eng"){
$lang_value = 1;
}else{
$lang_value = 0;
}
setCookie('language',$lang);
setCookie('language_value',$lang_value);
header("Refresh:0; url=".$current_link);
}else{ //if different language was not selected, check if cookie is set with language value
if(isset($_COOKIE["language"])){
$lang = $_COOKIE["language"];
$lang_value = $_COOKIE["language_value"];
}else{ //if cookie with language value is not set, create it now with default language option
setCookie('language','eng');
setCookie('language_value',1);
header("Refresh:0; url=".$current_link);
}
}
访客只能选择两种语言中的一种。如果选择了一种语言,则会创建具有所选语言值的 cookie。
如果未选择语言,脚本会检查是否存在具有该语言值的 cookie,如果存在,则访问 cookie 值。如果具有该语言值的 cookie 不存在,则会创建具有默认语言(英语)值的 cookie。
页面应该只在创建 cookie 时刷新,如果具有语言值的 cookie 存在,则继续执行其余代码。但是,即使在创建 cookie 并且可以访问之后,该页面也会继续刷新。例如:
echo $_COOKIE["language"]; //will output the selected language value
不确定这里的逻辑是否有问题,但我们将不胜感激。
谢谢
您需要为 cookie 添加过期时间和路径:
setCookie('language',$lang, time() + (86400 * 30), "/"); // 86400 = 1 day
对页面的每个请求都会运行这部分:
if(isset($_REQUEST["lang"])){
这意味着由于您的代码的无条件部分,页面将被刷新:
header("Refresh:0; url=".$current_link);
您可能想要做的是删除第一个页眉部分,只保留文本中所述的页眉部分。 它看起来像这样:
$current_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if(isset($_REQUEST["lang"])){ //check if different language was selected
$lang = $_REQUEST["lang"];
if($lang == "eng"){
$lang_value = 1;
}else{
$lang_value = 0;
}
setCookie('language',$lang);
setCookie('language_value',$lang_value);
#header("Refresh:0; url=".$current_link); ### Removing this line
}else{ //if different language was not selected, check if cookie is set with language value
if(isset($_COOKIE["language"])){
$lang = $_COOKIE["language"];
$lang_value = $_COOKIE["language_value"];
}else{ //if cookie with language value is not set, create it now with default language option
setCookie('language','eng');
setCookie('language_value',1);
header("Refresh:0; url=".$current_link);
}
}
我解开了这个谜。
问题出在 .htaccess 文件设置中,例如:
RewriteRule diploma-golf course.php?lang=eng&courseid=15 [NC])
因为我只看到了url末尾的'diploma-golf'部分,没想到每次刷新页面都传递了"lang"值。所以因为脚本每次都收到 "lang" 值,所以每次都会创建一个新的 cookie,导致无限刷新。更改了 if 语句逻辑,现在一切正常。