Подскажите с алгоритмом авторизации.
У меня сейчас сделано так - каждый раз, когда пользователь запрашивает любую страницу скрипт лезет в базу данных, чтобы проверить два ключа, которые находятся в сессии.
Я думаю переделать так - когда пользователь заходит, записать имя пользователя в сессию, из сессии доставать и вставлять в вёрстку имя пользователя и соответственно исходя из этого давать права на редактирование и сохранение информации, ведь данные сессии хранятся на сервере и изменить пользователь не сможет, а если пользователь выходит, то сессия затирается и отдаём страницу как простому пользователю, ну и каждые пять минут продлевать эту сессию, если пользователь активен.
Как считаете или может ещё немного изменить этот алгоритм?
_____________
Все будет офигенно. Кому-то сразу, кому-то постепенно.
Игорь_Vasinsky
7.10.2016 - 09:43
авторизирован пользователь или нет - решает сессия и точка.
в бд - лезть нужно только для того чтобы авторизировать пользователя.
если пользователь активен - сессия не мертва.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Как тогда сделать чтобы показывать другим пользователям, что пользователь активен и находится онлайн? Всё равно в таблицу писать? Например каждые 3 минуты? А сессии на 5 минут ставить.
_____________
Все будет офигенно. Кому-то сразу, кому-то постепенно.
Сессия обычно длится 30 минут. А вообще как настроите.
А активность обновлять при каждом действии.
Цитата (Kusss @ 7.10.2016 - 10:11) |
А активность обновлять при каждом действии. |
Каждый раз писать в таблицу?
_____________
Все будет офигенно. Кому-то сразу, кому-то постепенно.
miketomlin
7.10.2016 - 13:12
RootPM, сессии отчасти для того и создавались, чтобы не лезть каждый раз в базу. Про два ключа не понятно. sid – и есть ключ. Лично я сессии с их штатным механизмом редко использую, поэтому каждый раз лезу в базу и ничего зазорного в этом не вижу.
А вот ты решил забанить пользователя. Как сессия об этом узнает? Тебе всё равно лезть в базу надо, так что не вижу в этом ничего страшного.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
inpost
Каждый раз, когда пользователь загружает страницу - залазить в базу или только при сохранении и редактировании данных?
_____________
Все будет офигенно. Кому-то сразу, кому-то постепенно.
Игорь_Vasinsky
7.10.2016 - 16:41
-авторизация по бд (проверка бана)
-сохранение данных в сессию
-каждое действие пользователя на сайте - подтверждение его активности (онлайна) - в бд
-бан пользователя в бд
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
RootPMНа каждой странице в начале же проверять. Мало ли что.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Проверить логин и пароль из таблицы `user` - записать в сессию id и логин,
На каждой странице обновлять таблицу `online` и проверять имеется ли пользователь в таблице `ban` по id
Правильно?
_____________
Все будет офигенно. Кому-то сразу, кому-то постепенно.
RootPMЭто только функционал бана, а может там обновляется ещё его кредитный статус, а может быть там ещё уведомления специальные приходят на аккаунт. Запрашивать же можно много, всё зависит от твоих потребностей.
В сессии хранишь ID юзера (не говорим о безопасности в целом), и дёргаешь таблицу по ID. Всё.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
- при авторизации делаешь запрос к бд и если такой есть то записываешь id его в сессию, плюс если юсер хочет чтоб его запомнили на долго то создаешь хеш и записываешь его в бд и куки
- при заходе на каждую страницу делаешь проверку на этого юсера, ну и обновляешь данные какие нужно
- если юсер не нажал кнопку выйти а просто закрыл сайт, тр при следующем заходе на сайт делаешь проверку типа: если есть куки этого юсера и нет сессии, то записываем или куки в сессию, а лучше лезим в бд сравниваем хеш кук с данными в бд, далее записываем id юсера в сессию, далее обновляем хеш в бд и записываем обновленный хеш в куки
- если юсер нажал кнопку выйти, то удаляем сессию и куки
что то вроде такого
RootPM
29.10.2016 - 16:36
Цитата (inpost @ 7.10.2016 - 15:51) |
А вот ты решил забанить пользователя. Как сессия об этом узнает? Тебе всё равно лезть в базу надо, так что не вижу в этом ничего страшного. |
Перед любым созданием, удалением, редактированием информации проверяем что пользователь не заблокирован. Если пользователь просто ходит по сайту зачем создавать нагрузку, можно просто вывести имя пользователя из сессии или даже кук. Он также выйдет из учётной записи и будет ходить по сайту, поэтому без разницы. А если нужно заблокировать по IP то это лучше делать уровнем выше.
_____________
Все будет офигенно. Кому-то сразу, кому-то постепенно.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.