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 ответ, но я просто хочу повторить:
Файлы cookie не являются плохими для хранения информации, такой как настройки темы пользователя или предпочтительная стартовая страница, и т. Д. Они получают плохую репутацию от использования для идентификации и аутентификации. Существуют файлы cookie, которые в основном имеют "isAdmin=0" для контроля доступа пользователей. Это очень легко изменить на
isAdmin=1
и иметь полевой день. Поскольку вы новичок в PHP, не торопитесь, чтобы узнать о сессиях сейчас, пока все это для вас ново.Когда вы устанавливаете куки с помощью
setcookie
, вы отправляете HTTP-заголовок в браузер с информацией о куки. Браузер затем передает этот cookie в любых будущих запросах на сервер.$_COOKIE
Глобальная переменная содержит информацию о cookie, передаваемую из браузера на сервер.Так как вы используете
$_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() не работает, если что-либо (включая разрывы и пропуски в вашем скрипте) уже отправлено в браузер.