Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
sly 20.09.2003 18:48 / 20.09.2003 18:50
Вот класс. Когда гость, показывает "]" - непонятно откуда вылазит. Хочется понять, ОТКУДА. Вызывается метод ^user:check[]в корневом auto.p.@CLASS user @auto[] #======================================== ^use[${MAIN:dir_mods}user/user.tmpl] #======================================== $session_start[^dtf:sql[]] $session_ip[$env:REMOTE_ADDR] # Самая главная проверка, вызывается в корневом auto.p #======================================== @check[] ^if(def $cookie:user_nick && def $cookie:session_key){ # Если куки есть, пойдем узнавать про него... ^user_info[] }{ # ...а если нету...сделаем гостя! ^make_session_guest[] } #======================================== @login[] # Если в куке написано "гость", показываем ему форму для входа ^if($cookie:user_nick ne $alert:guest){ # Если по кукам не гость (т.е. уже зашел), тогда покажем ему на выход ^show_logout_form[] }{ # В противном случае пригласим зайти ^show_login_form[] } # Генерим 20-значный ключ в зависимости от времени входа #======================================== @make_session_key[] $long_session_key[^math:crypt[${session_start}^math:random(10000);^$apr1^$]] $session_key[^long_session_key.right(20)] # Генерим куки с именем и ключом сессии. Для гостя имя $alert:guest #======================================== @make_session_cookie[nick;key;expires] $cookie:user_nick[ $.value[$nick] $.expires[$expires] ] $cookie:session_key[ $.value[$key] $.expires[$expires] ] # Начинает сессию, записывая ник, ключ и времы старта #======================================== @write_session[nick;key;ip;start] ^connect[${MAIN:db_connect}]{ # Удалим сессию с ip, ником (и пустым тоже - на всякий случай :о) или истекшим сроком ^void:sql{delete from ${MAIN:db_prefix}_session where session_ip='$ip' | session_nick='' | session_nick='$nick' | session_start<='$session_start-$MAIN:site_cookie_expires' } # Запишем новую ^void:sql{insert into ${MAIN:db_prefix}_session (session_nick, session_key, session_ip, session_start) values ('$nick', '$key', '$ip', '$start') } # Если не гость, запишем в user дату последнего входа ($session_start -> $user_last_session) ^void:sql{update ${MAIN:db_prefix}_user set user_last_session='$session_start' where user_nick='$nick' } ] } # Делаем сессию для гостя (для юзверя это делает скрипт ~login.html) #======================================== @make_session_guest[] ^make_session_key[] ^write_session[$alert:guest;$session_key;$session_ip;$session_start] ^make_session_cookie[$alert:guest;$session_key;${MAIN:site_cookie_expires}] # Получение информации о юзере #======================================== @user_info[] # Поищем его в табле session: ^connect[${MAIN:db_connect}]{ $user[^table::sql{ select ${MAIN:db_prefix}_user.* from ${MAIN:db_prefix}_session, ${MAIN:db_prefix}_user where user_nick=session_nick && session_key='$cookie:session_key' } ] } # Если юзверь есть в обоих таблах, не забанен и ключ в порядке, сделаем ему мешок-хэш и будем дергать в любом месте # ^user:get[что-нибудь] #======================================== ^if($user){ $status[$user.user_status] # Статус юзверя: 1-подключен, 0-забанен ^if(^status.int[] == 1){ $info_hash[^user.hash[user_nick]] }{ ^page:refresh[$request.uri;$alert:banned] } }{ # Если же куки остались, но инфы о нем в сессиях нет, то сделаем его гостем ^make_session_guest[] } # Сама функция доставания из мешка #======================================== @get[field][field] ^switch[$field]{ ^case[id]{$info_hash.[$cookie:user_nick].user_id} ^case[status]{$info_hash.[$cookie:user_nick].user_status} ^case[reg_date]{$info_hash.[$cookie:user_nick].user_reg_date} ^case[last_session]{$info_hash.[$cookie:user_nick].user_last_session} ^case[nick]{$info_hash.[$cookie:user_nick].user_nick} ^case[pass]{$info_hash.[$cookie:user_nick].user_pass} ^case[name]{$info_hash.[$cookie:user_nick].user_name} ^case[level]{$info_hash.[$cookie:user_nick].user_level} ^case[lang]{$info_hash.[$cookie:user_nick].user_lang} ^case[theme]{$info_hash.[$cookie:user_nick].user_theme} ^case[mail]{$info_hash.[$cookie:user_nick].user_mail} ^case[spam_mail]{$info_hash.[$cookie:user_nick].user_spam_mail} ^case[url]{$info_hash.[$cookie:user_nick].user_url} ^case[msn]{$info_hash.[$cookie:user_nick].user_msn} ^case[icq]{$info_hash.[$cookie:user_nick].user_icq} ^case[slogan]{$info_hash.[$cookie:user_nick].user_slogan} ^case[avatar]{$info_hash.[$cookie:user_nick].user_avatar} ^case[DEFAULT]{'$field' - $alert:not_def} }