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