Вопрос по кукам

kotor
На сайте с 16.05.2010
Offline
91
1052

Добрый день. Решил попросить у вас помощи.

Есть авторизация на аяксе.

Форма входа -> обработчик с проверкой данных и созданием куков -> файл с проверкой куков.

После авторизации и создания куков пытаюсь вызвать их на главной - не работает, но в папке браузера я их вижу.

Решил проверить работают ли они сразу после создания - все окей, тут все пашет.

Может быть кто нибудь сталкивался с этой проблемой?

То есть я могу обратиться к кукам только в том файле, где я их создал. Если обновляю страницу или перехожу на другую и пытаюсь там их использовать - скрипты уже не работают.

Сильно не пинайте, заранее спасибо ;)

Qest
На сайте с 21.10.2010
Offline
40
#1
kotor:
Добрый день. Решил попросить у вас помощи.

Есть авторизация на аяксе.
Форма входа -> обработчик с проверкой данных и созданием куков -> файл с проверкой куков.

После авторизации и создания куков пытаюсь вызвать их на главной - не работает, но в папке браузера я их вижу.
Решил проверить работают ли они сразу после создания - все окей, тут все пашет.

Может быть кто нибудь сталкивался с этой проблемой?
То есть я могу обратиться к кукам только в том файле, где я их создал. Если обновляю страницу или перехожу на другую и пытаюсь там их использовать - скрипты уже не работают.

Сильно не пинайте, заранее спасибо ;)

Файл который создает куки находиться находиться в корне сайта? Если нет, попробуй его положить в корень. Страница после создания кук обновляется?

vlasoff
На сайте с 31.08.2007
Offline
101
#2
Once the cookies have been set, they can be accessed on the next page load with the $_COOKIE or $HTTP_COOKIE_VARS arrays.

http://php.net/manual/ru/function.setcookie.php

Установленная кука может быть прочитана только при следующей загрузке страницы. Файл скрипта, установившего куку здесь ни при чём, кука передаётся браузером при запросах к домену, для которого в хранилище браузера существует непросроченная кука.

Соответственно, в Вашем случае, после успешной авторизации, Вам необходимо "авансом" поправить отображение информации об авторизации пользователя посредством JavaScript. При загрузке следующей страницы кука прочитается.

kotor
На сайте с 16.05.2010
Offline
91
#3
Qest:
Файл который создает куки находиться находиться в корне сайта? Если нет, попробуй его положить в корень. Страница после создания кук обновляется?

Не в корне, в папке с обработчиками данных.

vlasoff:
Установленная кука может быть прочитана только при следующей загрузке страницы. Файл скрипта, установившего куку здесь ни при чём, кука передаётся браузером при запросах к домену, для которого в хранилище браузера существует непросроченная кука.

Соответственно, в Вашем случае, после успешной авторизации, Вам необходимо "авансом" поправить отображение информации об авторизации пользователя посредством JavaScript. При загрузке следующей страницы кука прочитается.

После нажатия на кнопку "Вход" с правильным логином и паролем, приходит ответ "Привет %имя_пользователя%. Все работает".

При этом %имя_пользователя% берется из БД с помощью запроса SELECT login FROM user WHERE id=$_COOKIE['id'].

То есть в файле авторизации они создаются и нормально работают.

Но если я хочу на любой другой странице точно также вывести логин пользователя, ничего не получается.

Сейчас попробую создать куки в корне, мб и правда в этом проблема.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#4

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

setcookie ( "userLogin", $userLogin, time()+3600*24*7, "/")

Параметр $path позволяет установить адрес(а), для которого(ых) могут использоваться кукисы. Если этот параметр не указан, то по умолчанию куки будут доступны для текущей директории, а также для всех поддиректорий, но в родительской категории Вы уже не сможете получить доступ к этим кукам.

з.ы. не стоит писать какие-то цифровые данные так, как я записал время действия кук. Лучше сразу запишите time()+604800, так как тут для сервера на 2 операции меньше:)

Подпись))
vlasoff
На сайте с 31.08.2007
Offline
101
#5
kotor:
При этом %имя_пользователя% берется из БД с помощью запроса SELECT login FROM user WHERE id=$_COOKIE['id'].

Вы это серьёзно? Злоумышленник сможет запросто создать куку с нужным id и зайти на сайт под любым пользователем.

kotor
На сайте с 16.05.2010
Offline
91
#6
vlasoff:
Вы это серьёзно? Злоумышленник сможет запросто создать куку с нужным id и зайти на сайт под любым пользователем.

Запрос показал чтобы вы смогли понять где возможная ошибка. Этим запросом я проверял где кука работает, а где нет.

У меня в куках хранится id и hash, которые и проверяются скриптом. Если вы можете посоветовать какие-то способы защиты от взлома, буду крайне рад ☝

V
На сайте с 05.01.2011
Offline
23
#7

а почему не воспользоватся сесиями ?

kotor
На сайте с 16.05.2010
Offline
91
#8
Милованов Ю.С:
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

setcookie ( "userLogin", $userLogin, time()+3600*24*7, "/")

Параметр $path позволяет установить адрес(а), для которого(ых) могут использоваться кукисы. Если этот параметр не указан, то по умолчанию куки будут доступны для текущей директории, а также для всех поддиректорий, но в родительской категории Вы уже не сможете получить доступ к этим кукам.
з.ы. не стоит писать какие-то цифровые данные так, как я записал время действия кук. Лучше сразу запишите time()+604800, так как тут для сервера на 2 операции меньше:)

Большое спасибо, ошибка и правда был на стадии установки кук.

Я не указывал последний параметр и кука создавалась только на папку /php/form/, поэтому внутри все работало, а на главной были ошибки.

Спасибо еще раз :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий