//пытаемся установить COOKIE
setcookie('hash', $hash, time() + 3600 * 24 * 365);
if(empty($_COOKIE['hash']))
exit('Включите куки');
время от времени возникает эта ошибка.
Эти строки кода вызываются рпи авторизации. Причём я заметил одну закономерность.
Ввожу логин и пароль. вызывается эта setcookie: выскакивает эта ошибка. Потом возвращаюсь назад и повторяю то же самое действие. Ошибки нет. всё работает. объясните пожалуйста в чём дело и как исправить
Спустя 5 минут, 43 секунды (30.08.2010 - 18:20) twin написал(а):
Ну вопервых так включение кук не проверишь. Нужно страницу перезагружать.
А во вторых - какая ошибка то?
А во вторых - какая ошибка то?
Спустя 32 минуты, 31 секунда (30.08.2010 - 18:52) _Dimarik__ написал(а):
на я имел в виду что exit срабатывает.
А как тогда правильно проверить включение кук?
Скорее всего дело идёт так:
setcookie('hash', $hash, time() + 3600 * 24 * 365);//устанавливаем куки
if(empty($_COOKIE['hash']))//почему-то переменная пуста
exit('Включите куки');//выскакивает exit
при перезапуски страницы (как ты сказал) этого нет и всё нормально работает. как исправить, чтоб всё грамотно работало?
А как тогда правильно проверить включение кук?
Скорее всего дело идёт так:
setcookie('hash', $hash, time() + 3600 * 24 * 365);//устанавливаем куки
if(empty($_COOKIE['hash']))//почему-то переменная пуста
exit('Включите куки');//выскакивает exit
при перезапуски страницы (как ты сказал) этого нет и всё нормально работает. как исправить, чтоб всё грамотно работало?
Спустя 6 минут, 3 секунды (30.08.2010 - 18:58) amazing написал(а):
А при первой загрузки страницы $hash точно существует?
Спустя 5 минут, 39 секунд (30.08.2010 - 19:04) twin написал(а):
Чтобы поставить кукис, нужно отправить заголовки. А значит перезагрузить страницу.
Но так делать нельзя, ибо если куки отключены, редирект зациклится.
По хорошему нужно поставить кукис, редиректнуть на другую страницу. Там проверить. Если нету - exit('Включите куки'); если есть - редирект обратно.
А зачем эта проверка? Кукис - вещь личная и интимная. Не все любят их использовать. А скрипт должен работать и без них.
if(empty($_COOKIE['hash']))
{
setcookie('hash', $hash, time() + 3600 * 24 * 365);
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
else
// Куки включены
Но так делать нельзя, ибо если куки отключены, редирект зациклится.
По хорошему нужно поставить кукис, редиректнуть на другую страницу. Там проверить. Если нету - exit('Включите куки'); если есть - редирект обратно.
А зачем эта проверка? Кукис - вещь личная и интимная. Не все любят их использовать. А скрипт должен работать и без них.
Спустя 4 минуты, 55 секунд (30.08.2010 - 19:09) Rivalryzerg написал(а):
Если уж совсем надо, то добавить:
setcookie('hash', $hash, time() + 3600 * 24 * 365);Но не совсем корректно так делать
$_COOKIE['hash'] = $hash;
Спустя 14 минут, 4 секунды (30.08.2010 - 19:23) twin написал(а):
Цитата |
Если уж совсем надо, то добавить: |
что это даст?
Спустя 8 минут, 17 секунд (30.08.2010 - 19:31) _Dimarik__ написал(а):
Цитата |
А при первой загрузки страницы $hash точно существует? |
да скорее всего нет
Спустя 1 минута, 34 секунды (30.08.2010 - 19:33) _Dimarik__ написал(а):
Цитата |
А зачем эта проверка? Кукис - вещь личная и интимная. Не все любят их использовать. А скрипт должен работать и без них. |
ну должен же у пользователя быть выбор: через сессию или через куки.
Если он всё-таки решил что через куки заохдить будет, то надо проверить, включил он их или нет
Спустя 33 секунды (30.08.2010 - 19:33) Rivalryzerg написал(а):
twin, работать в этом же скрипте с нужными переменными куки.
Спустя 1 минута, 2 секунды (30.08.2010 - 19:34) _Dimarik__ написал(а):
а как насчёт такой проверки:
if(!setcookie([а тут параметры]))
die('Включите куки');
???
if(!setcookie([а тут параметры]))
die('Включите куки');
???
Спустя 1 минута, 34 секунды (30.08.2010 - 19:36) _Dimarik__ написал(а):
или вот так?
if(!isset($_COOKIE['hash'])) exit('Включите куки');
if(in_array("hash", $_COOKIE)) exit('Ошибка 2');
хотя я не совсем понимаю зачем нужна перезагрузка страницы?
if(!isset($_COOKIE['hash'])) exit('Включите куки');
if(in_array("hash", $_COOKIE)) exit('Ошибка 2');
хотя я не совсем понимаю зачем нужна перезагрузка страницы?
Спустя 1 час, 57 минут, 15 секунд (30.08.2010 - 21:33) Nord написал(а):
Цитата |
а как насчёт такой проверки: if(!setcookie([а тут параметры])) die('Включите куки'); ??? |
Не получится
Цитата |
или вот так? if(!isset($_COOKIE['hash'])) exit('Включите куки'); if(in_array("hash", $_COOKIE)) exit('Ошибка 2'); |
Только после перезагрузки страницы
Цитата |
хотя я не совсем понимаю зачем нужна перезагрузка страницы? |
Чтобы куки отправились пользователю.
Если у него включены куки, он пошлет их в ответ следующей странице,
если нет, то массив $_COOKIE так и останется пустым
На самом деле очень доходчиво на все ваши вопросы дан ответ здесь: http://ru.php.net/manual/en/function.setcookie.php