Авторизация + сессии

4you

еееххххх....
Авторизация + сессии

Постановка задачи: пользователь заходит на сайт, где ему необходимо ввести логин и пароль. Если всё "ОК" то запускаю сессию и пропускаю пользователя дальше. Вопрос. Как проверить или отследить чтоб один и тот же пользователь не залогинился второй, третий и т.д. раз?
Спасибо
 

tony2001

TeaM PHPClub
писать где-нить флаг, что юзер залогинен под такой-то там сессией.
например, в базе.
 

Larson

Новичок
Записываешь время логина (в БД, в файл). При очередной авторизации проверяешь, а регистрировался ли такой пользователь минут так 10-15 мин назад - если да, то выкидываешь.
Только время надо постоянно обновлять, на каждом линке.
 

Larson

Новичок
Автор оригинала: tony2001
писать где-нить флаг, что юзер залогинен под такой-то там сессией.
например, в базе.
ИМХО так не получится, а откуда он будет знать, что юзер в он-лайн или нет?
 

4you

еееххххх....
писать где-нить флаг, что юзер залогинен под такой-то там сессией.
например, в базе.
Это понятно. Но потом если пользователь ушёл просто закрыв броузер этот флаг так и останется в базе, ведь отследить, что пользователь закрыл броузер я не могу.

Записываешь время логина (в БД, в файл). При очередной авторизации проверяешь, а регистрировался ли такой пользователь минут так 10-15 мин назад - если да, то выкидываешь.
Только время надо постоянно обновлять, на каждом линке.
ОК. Но если человек уже пол часа находится на зарегистрированной странице и ничего не делает (ушёл на обед а комп оставил включённым). При следующей регистрации его пустят. А есть смысл давать сессиям определёное имя и по имени смотреть есть такой пользователь или нет?
 

RomikChef

Guest
нет такого смысла.
это бессмысленно само по себе, и еще более бессмысленно - как альтернатива таймаута по базе.
 

tony2001

TeaM PHPClub
Larson:
у меня так работало, а я не знал, что не должно...
во блин.

на каждой странице(и при логине) я делаю вот что:
проверяю - соответствует ли SID этого юзера, записанному в базе.
если да - то все ок, время апдейчу до NOW().
если нет - значит это уже другая сессия и второй юзер.
если юзер логинится второй раз - я проверяю не истек ли таймаут у залогиненного юзера (пускай он будет минуты 2-е - я же на каждой странице его апдейчу).
если истек - меняем старую сессию на новую и продолжаем.


многословно, но просто.
 

Larson

Новичок
Автор оригинала: 4you
ОК. Но если человек уже пол часа находится на зарегистрированной странице и ничего не делает (ушёл на обед а комп оставил включённым).
А так никто не делает. Если чел ушел на обед и комп оставил в он-лайн, то любой может подойти и лазить по его логину.
При следующей регистрации его пустят. А есть смысл давать сессиям определёное имя и по имени смотреть есть такой пользователь или нет?
Записывай еще и ip - если соединение не оборвалось, то ip останется прежним - и его пустят без авторизации.
 

tony2001

TeaM PHPClub
можно просто session_handler = mysql сделать и хранить сессии в базе.
имхо так проще, но не факт, что лучше.
 

Larson

Новичок
Автор оригинала: tony2001
на каждой странице(и при логине) я делаю вот что:
проверяю - соответствует ли SID этого юзера, записанному в базе.
если да - то все ок, время апдейчу до NOW().
И я про то же. Но первый раз у тебя небыло ни слова про время.
 

tony2001

TeaM PHPClub
Romik:
да все это тестить надо.
вон, Слач говорил, что у него сессии в файлах сервак завалили, а спасся он сессиями в базе.
вполне может быть и обратный вариант.

опять же - здесь встает вопрос о глобальных для всех скриптов переменных типа "юзер ААА уже залогинен".
 

Ямерт

The Old One
Автор оригинала: tony2001
если истек - меняем старую сессию на новую и продолжаем.
Тони, если продолжаешь, то зачем заводить новую сессию? Почему просто не продлить старую? (хотя имхо, если текущая сессия не вечная, и просрочилась, то надо её просто убивать).
 

tony2001

TeaM PHPClub
в базе хранился старый ИД сессии, за это время вполне могла сессия сама (файл) умереть.
можно, конечно, начинать со старым ИД, но так мы возвращаемся к тому флейму в основном форуме насчет "вечного СИДа", в котором я смысла никакого не вижу.
элемент случайности имхо должен быть всегда.
 

tony2001

TeaM PHPClub
да, и такое было
базу - как хранилище флага и времени последнего доступа.
 

Unregistered

Guest
а если кукку кидать. при входе на страницу проверяется есть ли такая кука, если есть, то автоматический логин настраницу, если нету то спрашивать пароль и после регистарции делается кука. (вобщих чертах)
Тогда при работе с одного компа под двумя логинами не войдёшь.
 
Сверху