Страница PHP продолжает обновляться после установки COOKIE - PullRequest
0 голосов
/ 14 октября 2019

Следующий код является первым кодом на моей странице 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

Не уверен, что здесь что-то не так с логикой, но любая помощь будет оценена.

Спасибо

Ответы [ 3 ]

1 голос
/ 14 октября 2019

Мне удалось разгадать тайну.

Проблема была в настройке файла .htaccess, например:

RewriteRule diploma-golf course.php?lang=eng&courseid=15 [NC])

Поскольку я видел только часть «Диплом-гольф» наконец URL, я так и не понял, что значение "lang" передавалось каждый раз при обновлении страницы. Таким образом, поскольку скрипт каждый раз получал значение «lang», он каждый раз создавал новый файл cookie, что приводило к бесконечному обновлению. Изменена логика оператора if и теперь все работает как надо.

0 голосов
/ 14 октября 2019

Каждый запрос к странице будет запускать эту часть:

 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);
    }
}
0 голосов
/ 14 октября 2019

Вам нужно добавить срок действия и путь к cookie:

setCookie('language',$lang, time() + (86400 * 30), "/"); // 86400 = 1 day
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...