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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Одновременная авторизация 2-х пользователей

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Jlblcblu
Отправлено: 07 Ноября, 2010 - 23:15:19
Post Id



Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




Доброе время суток)
Столкнулся с проблемой. Вкратце:

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

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

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

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

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

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

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

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

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

З.Ы.
Заранее благодарен
 
 Top
vitaliy_mad
Отправлено: 07 Ноября, 2010 - 23:24:36
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




увеличить время таймаута
 
 Top
SAD
Отправлено: 07 Ноября, 2010 - 23:25:59
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




vitaliy_mad пишет:
увеличить время таймаута

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

(Отредактировано автором: 07 Ноября, 2010 - 23:26:43)

 
 Top
Jlblcblu
Отправлено: 07 Ноября, 2010 - 23:33:41
Post Id



Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




SAD пишет:
vitaliy_mad пишет:
увеличить время таймаута

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


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

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

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

З.Ы.
Студенты (для которых и пишется это) в состоянии подождать лишний час, лишь бы получить халяву)
 
 Top
vitaliy_mad
Отправлено: 07 Ноября, 2010 - 23:39:03
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




тогда может посмотреть в сторону
Цитата:
$_SESSION['user'] = $login;
Это не есть хорошая авторизация. и зачем тогда вообще авторизация, если любой студент может зайти под любым логином? Может усилить безопасность логина-пароля.

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

Другой вариант написать на Вашем сайте JS кодик который регулярно бы делал запрос к серверу и тем самым обновлял ваш онлайн
 
 Top
Jlblcblu
Отправлено: 08 Ноября, 2010 - 13:13:09
Post Id



Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




Есть пара вопросов:
vitaliy_mad пишет:
Это не есть хорошая авторизация.

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

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

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

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

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

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

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

Есть еще мысли по этому вопросу?

(Отредактировано автором: 08 Ноября, 2010 - 13:15:26)

 
 Top
vitaliy_mad
Отправлено: 08 Ноября, 2010 - 13:18:45
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




тогда можно сделать проверку по IP и пускать только с "разрешенных". Далее, онлайн остается но времени больше. в любом случае 5 минут это очень мало. если вообще заморачиваться, то можно после первого входа сбрасывать пароль, но тогда однозначно надо увеличивать время таймаута, и использовать куки с сроком жизни равным таймауту.

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



Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




vitaliy_mad пишет:
тогда можно сделать проверку по IP и пускать только с "разрешенных"

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

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

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

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


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




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

как уже сказал менять пароль после успешной авторизации... тогда точно никто второй раз не зайдет...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB