![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| mitris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 4.5.2007 Репутация: -1 Всего: нет |
Сделал на сайте аутентификацию пользователей с куками.
Когда нажимаю кнопку выходи, то кука не удаляется, а создается еще одна кука с таким же именем, только пустая. ![]() А вот сам код страницы выхода.
Помогите организовать правильный скрипт выхода пользователей... ПыСы. Когда пользователь входит, он может зайти просто (юзаю просто сессии) и поставив галочку "запомнить" (то есть юзаю куки и сессии). Когда просто сессии, то при каждом заходе на сайт ему нужно повторно авторизоватся. А когда юзер выбирает "запомнить", скрипт записывает значения кук, и при следующем заходе на страницу скрипт проверяет, есть ли определенные куки, если есть, он регистрирует в сессии их, а если их нету, то пользователь должен повторно авторизовыватся. ПыПыСы. раньше просто делал на сессих , без кукисов(пользоватлею приходилось каждый раз авторизовыватся), то все работало нормально, а тут решил попробовать с кукисами и не получается... |
|||
|
||||
| Sannis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.8.2007 Где: Москва Репутация: 6 Всего: 13 |
Cудя по ману на php.net нужно писать
P.S. И вот ещё что. Если смешивать авторизацию по кукам и сессии - могут глюки быть... Храните тогда сессию(переменные) тоже в куках... Это сообщение отредактировал(а) Sannis - 12.9.2007, 08:34 -------------------- |
|||
|
||||
| mitris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 4.5.2007 Репутация: -1 Всего: нет |
Sannis, хм, попробую...спасибо!
|
|||
|
||||
| Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
Я думаю, что лучше будет сделать авторизацию на сессии. И в форме авторизации спрашивать у юзера, запомнить его на данном компе или нет. Если "запомнить", то тогда устанавливать куки...
Почитайте мануал по работе с куками. Там все просто. |
|||
|
||||
| mitris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 4.5.2007 Репутация: -1 Всего: нет |
Acer, вот как Вы написали, так я с самого начала и делал
Вот и возникли проблемы с этим.... ПыСы. кто-то знает каким образом в IPB шифруются пароли ??? md5() - не подходит... |
|||
|
||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
mitris,
Что это? "Если уже есть кука, снова ее поставим"? Для удаления куки нужно задать просроченное время:
|
|||
|
||||
| Acer |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
Сделайте кнопку(если юзер авторизован, ее видно)
А потом проверяйте наличие пост переменной logout и если она есть удаляйте сессию авторизации и куку
|
||||
|
|||||
| mitris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 4.5.2007 Репутация: -1 Всего: нет |
Блин, новая проблема появилась, причем не одна....
Я на сайте юзаю mod_rewrite() то есть URL выглядит следующим образом http://mysite/news/view/1/ , например. Страница авторизации находится по адресу http://mysite/login/ При попытке зарегить куку лишь на период сессии (пока открыт браузер, но без использования session_start() ) то есть, я время не указываю, и оно регит куку лишь для папки login хотя, на самом деле такой папки не существует... А, когда указываю path то приходится указывать время действия куки, а это уже получается не на время сессии... как сделать, что бы кука жила лишь на время сессии и была доступна из корневой директории ??? Добавлено через 1 минуту и 37 секунд И еще, у меня на сайте была функция которая показывала, кто в данный момент на сайте. В БД я заносил ID сессии, а если работать просто с куками, без сессий, то откуда брать это ID ? Иил чем его можно заменить ??? Или дла этих целей прийдется начинать сессию ??? |
|||
|
||||
| Golda |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
указывайте время null
Фактически, выбор у Вас: либо использовать штатные средства php по работе с сессиями, либо эмулировать их же самостоятельно с использованием базы данных. Как вариант, можно использовать обычные сессии и переопределить местом хранения сесси базу данных Это сообщение отредактировал(а) Golda - 14.9.2007, 23:52 -------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
||||
|
|||||
| ewolf |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 15.8.2006 Где: г. Москва Репутация: 8 Всего: 18 |
Установить параметр expire функции setcookie равным 0 - об этом написано в документации функции. ну а кто мешает просто заносить в базу информацию о последних активных пользователях и дате их активности? т.е., какждый раз, когда пользователь заходит на страницу - добавлять об этом информацию в базу. Работать только с куками я бы не советовал, т.к. бывает, что у некоторых параноидальных пользователей они запрещены. Я бы сделал примерно такой алгоритм авторизации
Сами куки устанавливать только в момент входа пользователя (когда он вводит свои логин и пароль)
По-моему все-таки md5. Смотри в папке sources\loginauth Это сообщение отредактировал(а) ewolf - 15.9.2007, 01:03 |
||||
|
|||||
| mitris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 4.5.2007 Репутация: -1 Всего: нет |
Блин, ен получается...
Кто-то может мне дать скрипт страницы, где будет обрабатываться введенный логин и пароль , и если отмечена галочка, то регить куку на несколько дней, а если нет, то просто на время сессии, и скрипт, который будет проверять есть ли кука, то продливать ее жизнь и не запрашивать у пользователя логина и пароля... а то у меня не получается... ПыСы. я пытаюсь таким образом проверять
и даже если не отмечена галочка "запомнить" кукису все-равно присваивается время жизни не только на время сессии Добавлено через 56 секунд И еще вопрос, можно как-то проверить в установленной куке, время ее жизни ?? Ну типа сколько ей еще осталось жить, или она просто на время сессии установлена ??? |
|||
|
||||
| mitris |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 4.5.2007 Репутация: -1 Всего: нет |
Все, решил проблему, используя лишь сессии и одну куку имитирующую ID сессии.
Вот код : может кому-то пригодится config.php
login.php
exit.php
ПыСы. если заметите какую-то ошибку в коде, скажите пожалуйста мне, что бы я исправил... Добавлено через 1 минуту и 5 секунд UPD. код проверил. у меня работает так, как нужно.... |
||||||
|
|||||||
| Golda |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
Замечаний к Вашему коду довольно много.
1. Самое главное - неясно, зачем понадобилось смешивать самодельные сессии с настоящими? Вся информация уже есть в базе, признак того, нужно ли запоминать пользователя, храниться в таблице login. Зачем примешивать сессии? 2. Если уж используете сессии, делайте это последовательно. Не стоит использовать и старый подход (session_register() и session_is_registered()) и новый (массив $_SESSIONS). Второй предпочтительнее, т.к. в глобальных переменных не смешивается все на свете. Кстати, нигде не видно, где Вы стартуете сессию. Надеетесь на автоматический старт при session_register()? Тогда проверка isset($_SESSION["user_id"]) в 29 строке файла config.php пролетает. Хотя, возможно, session_start() не показан, а находится в файле, который подключает config.php до его подключения. Это так? Дальше по мелочи.
-------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
||||||
|
|||||||
| mitris |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 4.5.2007 Репутация: -1 Всего: нет |
вот... |
||||||||
|
|||||||||
| Golda |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
База - неплохой вариант. Я бы на Вашем месте избавилась от ненужного использования сессий. Меньше переделывать. Надеюсь, Вы имели в виду использовать массив $_SESSION Есть хорошая функция mysql_real_escape_string(). Чтобы понять, для чего это нужно, почитайте о SQL-инъекциях В строке 36 файла login.php есть INSERT-запрос, судя по которому таблица login содержит следующие поля (sid, uid, rem, time). Возможно, конечно, есть еще поля, у которых какие-то умолчательные значения. Дальше. В строке 66 config.php идет запрос, конечно, к таблице users. Но подставляется $row['id'], полученное в результате предыдущего запроса
$row['id'] здесь может появиться, только если в таблице login есть поле id. По смыслу, речь идет о идентификаторе пользователя, который, кажется, представлен у Вас в таблице login полем uid. -------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
||||
|
|||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |