Я новичок в 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); ?>
Большое вам спасибо за ответ заранее!
Мишель
setcookie
устанавливает только заголовок, который отправляется клиенту. Он не меняет $_COOKIE
.
В другой руке – $_COOKIE
заполняется куки, отправленные с клиента
Итак, на первом шаге – вы устанавливаете cookie с setcookie
и ничего не имеете в $_COOKIE
потому что клиент еще не отправил его и будет только по следующему запросу.
И нет способа делать то, что вы хотите, вместо того, $_COOKIE
вручную изменять $_COOKIE
PS: Плохая идея поставить пароль пользователя в файл cookie
Дайте zerkms ответ, но я просто хочу повторить:
Куки-файлы не плохие для хранения бит информации, например, предпочтений темы пользователя или предпочтительной стартовой страницы и т. Д. Они используют их плохую репутацию для использования для идентификации и проверки подлинности. Есть куки-файлы, которые в основном имеют «isAdmin = 0», чтобы контролировать доступ пользователей. Очень легко изменить это на isAdmin=1
и иметь день поля. Поскольку вы новичок в PHP, найдите время, чтобы узнать о сеансах сейчас, пока оно для вас совсем новое.
Когда вы устанавливаете cookie с помощью setcookie
, вы отправляете HTTP-заголовок в браузер с информацией о setcookie
cookie. Затем браузер передаст этот файл cookie в любых будущих запросах на сервер. Глобальная переменная $_COOKIE
содержит данные cookie, переданные из браузера на сервер.
Поскольку вы используете $_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 () терпит неудачу, если что-либо (включая разрывы и пробелы в вашем скрипте) уже отправлено в браузер.