parser

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

 

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

Еще про ip забыл)

RUnner 03.04.2003 04:58

Только отсутствует еще одна маленькая но важная проверка: ip
Я беру табличку
CREATE TABLE sessions (
  id bigint(20) unsigned NOT NULL auto_increment,
  nick bigint(20) unsigned NOT NULL default '0',
  uid char(32) NOT NULL default '',
  ip char(16) NOT NULL default '',
  PRIMARY KEY  (id),
  KEY uid (uid),
  KEY ip (ip)
) TYPE=MyISAM;
проверяю при каждом обращении а админ ли у нас
@check_login[]
^if(!def $cookie:userlogin){
	$result[false]
}{
	^MAIN:dbquery{$res(^int:sql{select count(id) from sessions where uid='$cookie:userlogin' and ip='$env:REMOTE_ADDR'})}
	^if($res==0){
		$result[false]
	}{
		^MAIN:dbquery{$userid(^int:sql{select nick from sessions where uid='$cookie:userlogin'}[$.limit(1)])}
		^MAIN:dbquery{$author[^string:sql{select concat_ws(' ',firstname,secname,lastname) from users where id='$userid'}]}
			$result[true]
	}
}
#end of @check_login[]
а сам логин вот так происходит:
@make_login[]
^if(!def $form:name || !def $form:passwd){
	^login_page[notcomplite]
}{	
	^MAIN:dbquery{$res(^int:sql{select id from users where nick='$form:name' and password=MD5('$form:passwd')}[$.default{0}])}
	^if($res==0){
		^login_page[incorrect]
	}{
		$uidstr[${form:passwd}${form:name}${env:REMOTE_ADDR}{^math:random(10000)}]
		^MAIN:dbquery{^void:sql{insert into sessions(nick,uid,ip) values('$res',MD5('$uidstr'),'$env:REMOTE_ADDR')}}
		^MAIN:dbquery{$uid[^string:sql{select MD5('$uidstr')}]}
		$cookie:userlogin[
			$.value[$uid]
			$.expires[session]
		]
		$response:location[^MAIN:servername[]/admin/index.html]
	}
}
#end of @make_login[]
при логауте не забывай вычищать sessions и куку %)