|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/276800fefa230.html, оценка из 5, голосов 10
|