php cookie не работает в первый раз при чтении

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

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

Один код 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") ?> в <?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); ?> 

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

Мишель

Related of "php cookie не работает в первый раз при чтении"

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

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

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

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

PS: Плохая идея поставить пароль пользователя в файл cookie

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

  1. Куки-файлы не плохие для хранения бит информации, например, предпочтений темы пользователя или предпочтительной стартовой страницы и т. Д. Они используют их плохую репутацию для использования для идентификации и проверки подлинности. Есть куки-файлы, которые в основном имеют «isAdmin = 0», чтобы контролировать доступ пользователей. Очень легко изменить это на isAdmin=1 и иметь день поля. Поскольку вы новичок в PHP, найдите время, чтобы узнать о сеансах сейчас, пока оно для вас совсем новое.

  2. Когда вы устанавливаете cookie с помощью setcookie , вы отправляете HTTP-заголовок в браузер с информацией о setcookie cookie. Затем браузер передаст этот файл 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!"; 

Это также поможет, если они очистят файлы cookie и т. Д.

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

 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 () терпит неудачу, если что-либо (включая разрывы и пробелы в вашем скрипте) уже отправлено в браузер.