Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Pavel Ammosov                        2:5020/52      23 May 2001  23:01:49
 To : All
 Subject : Re: session_id
 -------------------------------------------------------------------------------- 
 
 
 >> >Блин. Повтоярю еще раз своё предложение -- использовать id сессии --
 >> >порядковый номер, и код сессии -- рандомную кашу букв/цифр. Считаются
 > юзвери
 >> >по id'ям сессий, а аудентифицируются по коду сессии.
 >> Я с интересом почитаю, как ты планируешь считать номер сессии.
 > Обычный инкремент. Вобщем как сделал я. Сразу говорю, что задание было -- не
 > использовать куки(ну заказчик такой):
 > -юзверь заходит на главную страницу сайта
 
 Он может зайти куда угодно, я надеюсь ты это учитываешь.
 
 > -для него инкрементом делается новый id сессии. Т.е. на серваке есть файлик,
 > в котором записано число. Открываем файл, берем число, увеличиваем на
 > единицу, запоминаем и записываем в файл обратно.
 
 Тут у тебя race condition, если нету локинга для 
 этого файла.
 
 > -для этого id делается каша-малаша из букв и цифр -- код сессии. Я юзаю кашу
 > длиной 10 символов. Записываем эту пару в файл на сервере(можно СУБД
 > заюзать), указывая время создания сессии.
 > -теперь во всех ссылках магазина присутствует что-то типа
 > ....&session=123&sescode=G1FHL43DF4 . Можно и в куки записать.
 
 А смысл разделения session_id и session_code?
 я бы просто завел две таблицы 
 create table users (
   user_id serial primary key,
   login varchar(8),
   password char(34)
 )
 
 create table sessions (
     session_id char(32) primary key,
     user_id integer references users,
     last_activity datetime year to second
 )
 
 При логине юзера делал
 
 $dbh->do('insert into sessions(session_id, user_id, last_activity) 
 
   values(?, ?, CURRENT)', {}, $session_id, $user_id);
 Выставлял ему cookie с session_id (или переписывал ссылки в html, чтоб они
 session_id включали)
 
 Когда приходит реквест
 my $uid = $dbh->selectrow_array('select user_id from sessions 
   where session_id=?', {}, $session_id);
 if ($uid) {
   # Это наш юзер
   $dbh->do('update sessions set last_activity=CURRENT');
 } else {
   # Показать ему форму с логином
 }
 
 Hу и раз вполчаса по крону удалять строки из sessions, где 
 last_activity < CURRENT - 30 минут. (У меня новый парень, при
 приеме на работу, такую задачу сделал при помощи выбора всей таблицы 
 sessions и потом в цикле for делал DELETE :-))
 
 --
 Pavel Ammosov                                               O    \
 apavel@aha.ru                                                 __  )
 http://isabase.philol.msu.ru/~apavel/                             )
 wget -O - isabase.philol.msu.ru/~apavel/key.asc|pgp -fka    O    /
 
 --- FIDOGATE 4.4.0-snp10
  * Origin: Zenon N.S.P. news server (2:5020/52.0)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: session_id   Pavel Ammosov   23 May 2001 23:01:49 
Архивное /ru.cgi.perl/276800fefa230.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional