krafty
new Exception
И снова авторизация или ФАНАТ откликнись
Вернемся к нашим баранам.
Логика такая.
в index.php вводим логин и пароль.
в auth.php удаляем из таблицы users_online (поля: id|login|online_since|sid) записи, у которых online_since меньше на более чем 3 часа по сравнению с текущим временем.
далее сравниваем с БД логин и пароль, стартуем сессию. если авторизовался, то смотрим в ussers_online есть ли там такой логин. если есть, то дальше не пропускаем. если нет, то отправляем на admin.php, где проверяем существование сессионной переменой и равенство sid текущей сессии и sid из таблицы users_online.
Теперь рассказываю в чем загвоздка.
Допустим юзер успешно авторизовался. скрипт прописал его в users_online, пропустил на admin.php. он (юзер) поработал 2 часа и ...закрыл браузер. сессия уничтожилась. в таблице users_online осталась запись. через 20 мин ему снова захотелось зайти. открывает index.php, авторизуется, но auth.php его не пропускает, т.к. существует в таблице userd_online запись с его логином. эта запись при старте скрипта не удалилась (не прошло 3 часа). вобщем никуда он не попадает, хотя имеет на это полное право.
Че делать? отказываться от использования дополнительной таблицы не хочется, т.к. она не дает возможности зайти в одно время в систему с одинаковыми логинами.
может проверять в auth.php при старте есть ли в базе логин у которого не истекло время и если совпадает с авторизовавшимся, то переписать sid пропускать дальше. не повлияет ли это на безпасность системы. надо подумать...
ЗЫ. если нужны исходники, могу запостить
Вернемся к нашим баранам.
Логика такая.
в index.php вводим логин и пароль.
в auth.php удаляем из таблицы users_online (поля: id|login|online_since|sid) записи, у которых online_since меньше на более чем 3 часа по сравнению с текущим временем.
далее сравниваем с БД логин и пароль, стартуем сессию. если авторизовался, то смотрим в ussers_online есть ли там такой логин. если есть, то дальше не пропускаем. если нет, то отправляем на admin.php, где проверяем существование сессионной переменой и равенство sid текущей сессии и sid из таблицы users_online.
Теперь рассказываю в чем загвоздка.
Допустим юзер успешно авторизовался. скрипт прописал его в users_online, пропустил на admin.php. он (юзер) поработал 2 часа и ...закрыл браузер. сессия уничтожилась. в таблице users_online осталась запись. через 20 мин ему снова захотелось зайти. открывает index.php, авторизуется, но auth.php его не пропускает, т.к. существует в таблице userd_online запись с его логином. эта запись при старте скрипта не удалилась (не прошло 3 часа). вобщем никуда он не попадает, хотя имеет на это полное право.
Че делать? отказываться от использования дополнительной таблицы не хочется, т.к. она не дает возможности зайти в одно время в систему с одинаковыми логинами.
может проверять в auth.php при старте есть ли в базе логин у которого не истекло время и если совпадает с авторизовавшимся, то переписать sid пропускать дальше. не повлияет ли это на безпасность системы. надо подумать...
ЗЫ. если нужны исходники, могу запостить
