Проблема установки / проверки cookie в PHP - PullRequest
1 голос
/ 20 июня 2011

У меня небольшой базовый веб-сайт, некоторые страницы которого пользователи могут просматривать только после входа в систему. Существует только 1 имя пользователя и пароль, поскольку сайт предназначен только для нескольких человек и безопасность не является серьезной проблемой.В любом случае, когда пользователь вводит правильное имя пользователя и пароль и отправляет сообщение, в коде устанавливается файл cookie, и страница перезагружается.Но он по-прежнему показывает содержимое, как если бы пользователь не вошел в систему. Когда я снова нажимаю кнопку sumbit или просто нажимаю на другую страницу, содержимое отображается правильно (больше элементов на панели навигации).Я не могу понять, почему он не показывает элементы в первый раз.

Вверху страницы входа в систему:

    if (isset($_POST['reg'])){
    if ($form_errors = validate_form()) {
        show_form($form_errors);
    } else {
        logon();
    }
} else {
   show_form();
}

Содержание страницы(функция show_form)

    <?php
    if( isset($_COOKIE['logedon'])){
        echo '<p>You are now logged on</p>';
        }
    else{
          //shows form containing: <input type="hidden" name="reg" value="1"/>
    }
?>

и, наконец, функция logon ()

function logon(){
$expire= 60 * 60 * 24 * 10000 + time(); 
setcookie('logedon', true, $expire); 
show_form();
}

Итак, файл cookie установлен, функция show_form вызывается, нопо-прежнему показывает форму вместо эхо «вы сейчас вошли».Когда я переключаю страницу или снова нажимаю кнопку отправки, отображается эхо.Почему это не происходит в первый раз?

Пожалуйста, помогите!

Ответы [ 2 ]

4 голосов
/ 20 июня 2011

Документы setcookie говорят:

Файлы cookie не будут видны до следующей загрузки страницы, для которой должен быть открыт файл cookie.Чтобы проверить, был ли cookie успешно установлен, проверьте его на следующей странице загрузки, прежде чем истечет срок действия cookie.Время истечения устанавливается через параметр истечения.Хороший способ отладить существование файлов cookie - просто вызвать print_r ($ _ COOKIE);.

После настройки файла cookie вам следует перезагрузить страницу, вы можете использовать header('location:http://someurl');die();

0 голосов
/ 20 июня 2011

Просто обновите страницу вручную, как только будет выполнен вход с использованием функции заголовка. После того, как файл cookie установлен, к нему можно получить доступ только на следующей странице. Перезагрузите страницу

См. Документацию setcookie .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...