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 语句逻辑,现在一切正常。