Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Тайлер 19.07.2002 00:56
Народ!#Цель – в случае успешной авторизации поставить $auth[ok] ^if(def $cookie:user_id){ #cчитаем текущую секунду недели $time[^date::now[]] $week_second[^eval(($time.weekday * 86400) + ($time.hour * 3600) + ($time.minute * 60) + $time.second)] #загружаем таблицу с ключами сессий и перебираем ее #если находим ключ из куки, то проверяем соответствие IP, если и он совпадает, # то проверяем время создания ключа. Путем отнимания текущей секунды недели от # времени в таблице, если разница более 900 сек. (15 мин.), то увы. $keys[^table::load[session_keys.dat]] ^keys.menu{ ^if($keys.key eq $cookie:user_id){ ^if($keys.ip eq $env:REMOTE_ADDR){ ^if(^eval($week_second - $keys.time) < 900){ $auth[ok] } } } } }{ # если авторизация через куки не прошла, то просто проверяем пароль. #если он совпал, ставим флаг ($auth[ok]), генерируем ключ, записывает его в куки, #добавляем его в таблицу (+ ip и время), сохраняем ее. $users[^table::load[users.dat]] ^users.menu{ ^if($users.login eq $form:login && $users.password eq $form:password){ $auth[ok] $i[32] $abc[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz] ^while($i >= 0){ $key[$key^abc.mid(^math:random(61);1)] $i[^eval($i-1)] } $cookie:user_id[ $.value[$key] $.expires[session] ] ^keys.append{$env:REMOTE_ADDR $key $week_second} #Здесь должен быть код очистки таблицы от старых записей #Но я его пока не придумал :( ^keys.save[session_keys.dat] } } } # финиш ^if($auth eq ok){ successes_variant }{ error_variant }P.S. Сохранять в SQL не предлагать, т.к. такой возможности нет.