Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Одновременная авторизация 2-х пользователей
Форумы портала PHP.SU » PHP » Программирование на PHP » Одновременная авторизация 2-х пользователей

Страниц (1): [1]
 

1. Jlblcblu - 07 Ноября, 2010 - 23:15:19 - перейти к сообщению
Доброе время суток)
Столкнулся с проблемой. Вкратце:

Нужно запретить авторизацию пользователя тогда, когда под таким же логином пользователь уже авторизован.

В данный момент это осуществляется так.

Есть таблица online;

При авторизации записывается id сессии, текущее время.
При обращении к страничке мы проверяем такой айдишник сессии в базе, если есть, то обновляем время.
Далее идет проверка тех пользователей, кто не был активен. Т.е. если разница записанной даты и текущей более 5 минут - то пользователь считается оффлайн и строчка из базы удаляется.

При авторизации мы проверяем есть ли такой пользователь онлайн - если да, то запрет на авторизацию, нет - логинимся и все сначала)

================================ =======================
Суть проблемы:
Представим, что пользователь авторизовался, посидел на сайте 5 минут без действий. Значения из базы online удалились. В это время авторизовался пользователь2. (ведь данные о сессии пользователя 1 удалены)

Таким образом мы получили 2 пользователей онлайн под 1 учетной записью.
================================ =======================
Каким образом организовать авторизацию, чтоб избежать таких камней?)

Аторизация сейчас происходит так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $_SESSION['user'] = $login; // например
  3.  

Куки не используются.

З.Ы.
Заранее благодарен
2. vitaliy_mad - 07 Ноября, 2010 - 23:24:36 - перейти к сообщению
увеличить время таймаута
3. SAD - 07 Ноября, 2010 - 23:25:59 - перейти к сообщению
vitaliy_mad пишет:
увеличить время таймаута

я тоже так думаю, 5 минут - это очень мало. может пользователь читает страницу.
4. Jlblcblu - 07 Ноября, 2010 - 23:33:41 - перейти к сообщению
SAD пишет:
vitaliy_mad пишет:
увеличить время таймаута

я тоже так думаю, 5 минут - это очень мало. может пользователь читает страницу.


Думаю это не выход.

Статистика об онлайне будет очень неточной.

Можно пересмотреть всю систему авторизации и отслеживания онлайн.
Главное запретить одновременную авторизацию.
И Ведь даже увеличив таймаут - мы сможем авторизоваться через 40 минут, час два часа и т.д.

З.Ы.
Студенты (для которых и пишется это) в состоянии подождать лишний час, лишь бы получить халяву)
5. vitaliy_mad - 07 Ноября, 2010 - 23:39:03 - перейти к сообщению
тогда может посмотреть в сторону
Цитата:
$_SESSION['user'] = $login;
Это не есть хорошая авторизация. и зачем тогда вообще авторизация, если любой студент может зайти под любым логином? Может усилить безопасность логина-пароля.

Переделав систему авторизации Ваша проблема останеться. Онлайн делается только по таймауту. другого варианта нет. разве что использование cgi и забыть про PHP. Использовать постоянный конект с клиентом...

Другой вариант написать на Вашем сайте JS кодик который регулярно бы делал запрос к серверу и тем самым обновлял ваш онлайн
6. Jlblcblu - 08 Ноября, 2010 - 13:13:09 - перейти к сообщению
Есть пара вопросов:
vitaliy_mad пишет:
Это не есть хорошая авторизация.

1) Что есть "хорошая авторизация"? Хотелось бы сделать ее так, как это нужно делать на самом деле.
Ибо в интернете множество примеров (мусора) на эту тему. А хотелось бы увидеть реализацию от профессионалов.

2)
vitaliy_mad пишет:
и зачем тогда вообще авторизация, если любой студент может зайти под любым логином?

Тут неточно.
Логин и пароль раздаются каждому индивидуально перед началом тестирования.
Все студенты проходят авторизацию и начинают проходить тест.
Далее умные студенты, дождавшись 5 минут (они естественно не знают точное количество времени), отправляют логин и пароль своему другу, преподавателю, вобщем тому, кто может за них решить.
После того, как за него ответят на вопросы, студент жмет кнопку завершить и... успешно сдает тестирование.

Да, у нас в таблице онлайн обновляется айпишник, на котором открыт тест данного пользователя. И легко отследить администратору где не 192.168.*.*

Но это опять-таки заплатка на проблему, а не правильное ее решение!
vitaliy_mad пишет:
Переделав систему авторизации Ваша проблема останеться. Онлайн делается только по таймауту. другого варианта нет. разве что использование cgi и забыть про PHP. Использовать постоянный конект с клиентом...

Другой вариант написать на Вашем сайте JS кодик который регулярно бы делал запрос к серверу и тем самым обновлял ваш онлайн

Опустим систему отслеживания онлайн.
Главное избавиться от множественной одновременной авторизации.

Есть еще мысли по этому вопросу?
7. vitaliy_mad - 08 Ноября, 2010 - 13:18:45 - перейти к сообщению
тогда можно сделать проверку по IP и пускать только с "разрешенных". Далее, онлайн остается но времени больше. в любом случае 5 минут это очень мало. если вообще заморачиваться, то можно после первого входа сбрасывать пароль, но тогда однозначно надо увеличивать время таймаута, и использовать куки с сроком жизни равным таймауту.

в сессии лучше хранить не логин, а случайное число (сессию), которое будет записывать в БД соответствующему юзеру при авторизации. Тогда вся аутенификация будет сводиться к проверке этой сессии...
8. Jlblcblu - 08 Ноября, 2010 - 13:29:25 - перейти к сообщению
vitaliy_mad пишет:
тогда можно сделать проверку по IP и пускать только с "разрешенных"

К сожалению нельзя, ибо контрольные тестировани проводятся с этих ip, а у студентов есть возможность готовиться к тестированиям, проходя пробные со своих домашних компьютеров.

Я думал может сделать так:
при успешной авторизации, ставить пользователю статус - "авторизованный" на время - равное времени теста (неизвестно как определять это, но не важно) + минут 10 на различного рода нюансы. Менять статус по нажатию кнопки выход или по истечении времени. А также нужно убить сессию текущему пользователю.

Но пришел к выводу, что это бредовая, непродуманная идея.

Даже не знаю, чтоб еще такое придумать, чтоб защититься от этого.
9. vitaliy_mad - 08 Ноября, 2010 - 13:33:11 - перейти к сообщению
всну так и зделайте так, при контроольном тестировании проверка по IP, при подготовке с любого.

как уже сказал менять пароль после успешной авторизации... тогда точно никто второй раз не зайдет...

 

Powered by ExBB FM 1.0 RC1