parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Как вам вот такое решение?

Тайлер 19.07.2002 00:56

Народ!
Просьба не ругать за кривизну кода, т.к. я еще новичок.
У меня есть два решения проблемы создания сессий:

1) mod_rewrite
т.е. через rewrite_rule отслеживать что-то типа /session/key/usual_path

2) Cookies.
Вот что я набросал:
#Цель – в случае успешной авторизации поставить $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 не предлагать, т.к. такой возможности нет.
(Иначе вопроса и небыло бы) .
Думаю, может для сохранения и очистки таблицы использовать перл?

P.P.S. Возможно что-то похожее будет применено для адм. скрипта сайта: макс. число юзеров 5, одновременно работающих 2. Вероятность работы в ночь с воскресения на понедельик крайне мала.

P.P.S. Какое оптимальное время для длительности сессии?