php cookie не работает при первом чтении

Я новичок в PHP и учусь использовать cookie для входа в систему. Любое тело, пожалуйста, проверьте мой код, чтобы увидеть, в чем моя проблема, или позвольте мне, как решить эту проблему.

Когда я открываю страницу в первый раз, cookie не будет работать. Это будет работать, когда я повторил, чтобы открыть эту ссылку. Тем не менее, я все еще не мог заставить его работать после того, как я использую функцию include и header Один из кодов:

Один код cookie.php:

<?php
setcookie("cookiename",$_REQUEST['name']);
if(isset($_COOKIE['cookiename'])){
$cookieSet = ' The Cookie is ' .  $_COOKIE['cookiename'];
} else {
$cookieset = ' No Cookie has been set';
}
setcookie("cookiepwd",$_REQUEST['pwd']);
print_r($_COOKIE);
?>

Когда я запускаю этот код в первый раз, он ничего не показывает. Я вижу данные cookie во второй раз. С какого-то сайта сказано, что cookie не будет читаться на той же странице.

Поэтому я переместил print_r($_COOKIE) во второй php-файл, а также добавил функцию include() или header() в указанный выше файл, но оба не работают.

Cookie2.php:

<?php
setcookie("cookiename",$_REQUEST['name']);
if(isset($_COOKIE['cookiename'])){
$cookieSet = ' The Cookie is ' .  $_COOKIE['cookiename'];
} else {
$cookieset = ' No Cookie has been set';
}
setcookie("cookiepwd",$_REQUEST['pwd']);
include(‘printcookie.php’);
//or header("Location: printcookie.php")
?>

printcookie.php:

<?php
print_r($_COOKIE);
?>

Большое спасибо за ответ заранее!

Мишель

3 ответа

setcookie только устанавливает заголовок, который отправляется клиенту. Это не меняет $_COOKIE суперглобальный.

В другой руке - $_COOKIE заполняется файлами cookie, отправленными клиентом

Итак, на первом этапе - вы устанавливаете куки с setcookie и не иметь ничего в $_COOKIE потому что клиент еще не отправил, и будет только на следующий запрос.

И нет способа делать то, что вы хотите, а не изменять $_COOKIE вручную

PS: это плохая идея, чтобы поместить пароль пользователя в куки

Дайте zerkms ответ, но я просто хочу повторить:

  1. Файлы cookie не являются плохими для хранения информации, такой как настройки темы пользователя или предпочтительная стартовая страница, и т. Д. Они получают плохую репутацию от использования для идентификации и аутентификации. Существуют файлы cookie, которые в основном имеют "isAdmin=0" для контроля доступа пользователей. Это очень легко изменить на isAdmin=1 и иметь полевой день. Поскольку вы новичок в PHP, не торопитесь, чтобы узнать о сессиях сейчас, пока все это для вас ново.

  2. Когда вы устанавливаете куки с помощью setcookie, вы отправляете HTTP-заголовок в браузер с информацией о куки. Браузер затем передает этот cookie в любых будущих запросах на сервер. $_COOKIE Глобальная переменная содержит информацию о cookie, передаваемую из браузера на сервер.

  3. Так как вы используете $_REQUEST чтобы получить имя cookie-файла, вам не нужно проверять cookie-файл (иначе у вас не будет данных, чтобы установить его правильно?). Так что рассмотрите возможность пойти по этому маршруту:

    if(!isset($_COOKIE['cookiename'])) {
          $name = $_POST['name']);
          setcookie("cookiename",$name);
     } else {
        $name = $_COOKIE['cookiename']);
     }
    
    echo "Welcome back $name!";
    

Это также поможет, если они очистят куки и т. Д.

Но на самом деле, более безопасный маршрут:

session_start();
if(!isset($_SESSION['name'])){
    $_SESSION['name'] = $_POST['name']);
}
if(!isset($_SESSION['pwd'])){
    $_SESSION['pwd'] = $_POST['pwd']);
}

$name =  $_SESSION['name'];
$pwd = $_SESSION['pwd'];

И даже это будет осуждено за серьезную веб-безопасность, где вы должны просто проверить пароль по сохраненному хешу, а затем удалить его, используя другие глобальные переменные для подтверждения целостности сеанса. Но теперь для этого есть целый StackExchange.

В качестве обходного пути вы можете использовать location() после проверки cookie, чтобы получить доступ к сохраненным данным.

Но имейте в виду, что location() не работает, если что-либо (включая разрывы и пропуски в вашем скрипте) уже отправлено в браузер.

Другие вопросы по тегам