| Новости | 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 не предлагать, т.к. такой возможности нет.