PHP setcookie не работает - PullRequest
       3

PHP setcookie не работает

0 голосов
/ 26 февраля 2011

Похоже, это должно работать:

if ($_POST['stayloggedin'] == 'stayloggedin') {

    setcookie("user", $_POST['mail'], time()+7*24*60*60, '/', 'subdomain.example.com', false, true);
    setcookie("hash", md5(sha1(md5($_POST['pw']))), time()+7*24*60*60, '/', 'subdomain.example.com', false, true);

}

header("Location: /"); 
exit();

Я поместил ob_start () поверх кода, так что это не должно быть главное.

Ответы [ 5 ]

13 голосов
/ 06 июля 2011

убедитесь, что ваш файл php.ini разрешает использование файлов cookie. Кроме того, вы НИКОГДА не должны сохранять конфиденциальные данные в файле cookie или переменной сеанса.

Предложение: вместо этого сохраните уникальный идентификатор, а затем запросите базу данныхкак имена пользователей и пароли.Вы просто просите, чтобы вас взломали, делая это так, как вы это делаете.

Не будьте негативными, просто полезный предупредительный совет.

5 голосов
/ 20 декабря 2011

Убедитесь, что вы не отправляете какие-либо выходные данные в браузер до вызова функции setcookie().ob_start() должен остановить ошибку «output before setcookie()», но она может быть реализована неправильно.

3 голосов
/ 05 октября 2012

Майк прав. Вы оба покидаете страницу и убиваете выполнение PHP, прежде чем что-либо выводить. ob_start() на самом деле проблема: он открывает буфер вывода (вместо фактической отправки данных). Если вы хотите, чтобы что-то было отправлено, вы должны либо очистить буфер (с помощью ob_end_flush()), либо дождаться нормального завершения сценария PHP. Так что в вашем случае куки не отправляются вообще.

1 голос
/ 29 августа 2012

Глядя на этот фрагмент кода, я бы сказал, что проблема в том, что cookie никогда не отправляется в браузер пользователя. Файлы cookie хранятся на стороне клиента, а не на сервере; вы создаете два новых, но затем немедленно вызываете exit (), который убивает скрипт PHP, прежде чем любой ответ будет отправлен с сервера пользователю.

0 голосов
/ 26 февраля 2011

Попробуйте это

setcookie("user", $_POST['mail'], time()+7*24*60*60, '/', '.example.com');
setcookie("hash", md5(sha1(md5($_POST['pw']))), time()+7*24*60*60, '/', '.example.com');
...