کلاس صحت سنج رو تغییرات اساسی دادم.در مورد این کلاس براتون توضیح میدم.
ابتدا سورس کلاس:
کد:
<?php
#this class is for auth user and ect
class validator{
private $db;
function __construct($id=""){
$this->db= new cls_database;
$this->db->do_quary("select * from " . TablePrefix . "settings;");
$row=$this->db->get_first_row_array();
$last_check_refresh = NextValidatorRefresh + $row['LastValidatorRefresh'];
if($last_check_refresh < time()){
$this->refresh();
}
}
#this function get validate id from cookie and session
public function get_id_from_pc($type){
$obj_session = new session;
$from_session = $obj_session->get($type);
$obj_cookie = new sys_cookie;
$from_cookie = $obj_cookie->get($type);
if($from_cookie==$from_session && $from_cookie!=''){ return $from_cookie;}
elseif($from_cookie==''){ return $from_session;}
elseif($from_session==''){ return $from_cookie;}
}
#this function for add validate number
public function add($type, $cookie = false, $id=''){
if($id=='') {
#get new id
$id = $this->get_id();
}
#ADD TO SESSION
$obj_session = new session;
$obj_session->set($type,$id);
if($cookie){
$obj_cookie = new sys_cookie;
$obj_cookie->set($type,$id);
}
if ($this->is_valid($type)){
$this->update($type);
return $id;
}
$this->db->do_quary("insert into " . TablePrefix . "validator (vid,experid,validator_source) values (?,?,?);", array($id,ValidatorTime,$type));
return $id;;
}
#this function check id of validatoor and return T/F
public function is_valid($type){
$obj_io = new sys_io;
$obj_session = new session;
$obj_cookie = new sys_cookie;
#check for that user loged in before vith validator class
$valid_num = $this->get_id_from_pc($type);
if($valid_num!=''){
#going to check validate from database
if($this->is_free($type,$valid_num)){ return false;}
else{ return true;}
}
return false;
}
public function update($type){
if(!$this->is_valid($type)){return false;}
$this->db->do_quary("update " . TablePrefix . "validator set experid='" . ValidatorTime . "' where vid=?;", array($type));
return true;
}
#this function is for delete validator id
public function delete($type){
$this->db->do_quary("delete from " . TablePrefix . "validator where vid=?;", array($type));
return true;
}
#this function is for generate id
public function get_id($type='core'){
$obj_general = new sys_general;
do{
$id = $obj_general->get_random_string(32);
}
while(!$this->is_free($type,$id));
return $id;
}
#this function check for that id is valid in database
public function is_free($type,$id){
$result= $this->db->do_quary("select * from " . TablePrefix
. "validator where vid=? and experid >" . time() . " and validator_source=?;" ,array($id,$type));
if($this->db->rows_count()==0){
return true;}
return false;
}
#this function is for refresh database validator list
private function refresh(){
#clear old data from database
$this->db->do_quary("delete from " . TablePrefix . "validator where experid<?;", array(time()));
#update next check for refresh database
$this->db->do_quary("update " . TablePrefix . "settings set LastValidatorRefresh=?;", array(time()));
return true;
}
}
?>
این کلاس کار صحت سنجی اطلاعات کاربرا و پلاگین های مختلف رو انجام میده . در واقع با این کلاس یه عدد تصادفی ایجاد میکنیم و این عدد رو در نشست و کوکی (به دلخواه ذخیره میکنیم) . اسم یا اندیس کوکی یا نشست همون منبعی هست که از این اطلاعات استفاده میکنه و رشته ذخیره شده علاوه بر ذخیره در نشست و کوکی در اختیار پلاگین یا برنامه ای که ازش استفاده میکنه قرار میگیره .
یه مثال میزنم :
پلاگین user رو در نظر بگیرید .
کد:
#this function do login proccess
public function user_login($username,$password,$remember=false){
if($this->is_logedin()){
#user is loged in before
return true;}
elseif($username=='' || $password==''){
#invalid data input
return false;}
else{
#going to check data input
$obj_db = new cls_database;
$obj_validator = new validator;
$password = md5($password);
$obj_db->do_quary('select username from ' . TablePrefix . 'users where username=? and password=?;',array($username,$password));
if($obj_db->rows_count()!=0){
$obj_db->do_quary("update " .
TablePrefix . "users set validator_id=? where username=?;",array($obj_validator->add('SYS_USER',$remember),$username));
return true;
}
else{
return false;
}
}
}
اگه به فایل loader.php این پلاگین نگاه کنید در متد user_login بعد از اینکه مطمئن شدیم نام کاربری و کلمه عبور درسته اومدیم یه کد صحت سنج به کاربر اختصاص دادیم که برای پلاگین user کلمه 'SYS_USER' هست.
بعد از از استفاده از متد ADD کلاس VALIDATOR یک رشته تصادفی در کوکی و نشست ذخیره میشه علاوه بر اون این رشته و تاریخ انقضای اون و کلمه صحت سنج در جدول validator ذخیره میشه(در بانک اطلاعاتی)
در آخر اون رشته تصادفی هم برای پیگیره صحت در ستون validator_id در جدول users ذخیره میشه.
خوب استفاده این کد چی بود؟
استفادش اینجوریه که از این به بعد از هر جای برنامه که بخوایم چک کنیم کاربر لوگین کرده یا نه فقط کافیه صحت کد سورس رو بررسی کنیم . برای این کار ابتدا یه شی از کلاس validator ایجاد میکنیم و با متد is_valid کد سورس رو بررسی میکنیم و شی به ما true/false پس میفرسته.
کد:
#return t/f user loged in before
public function is_logedin(){
$obj_validator = new validator;
#check for that user loged in before vith validator class
if($obj_validator->is_valid('SYS_USER')){
return true;
}
return false;
}
همچنین تاریخ انتقضای صحت سنج ها از طریق فایل کانفینگ قابل تغییر هست
کد:
define ("ValidatorTime",time() + 3600);
3600 رو فقط تغییر بدید که برابر یک ساعت هست
برای دانلود نسخه جدید روی لینک زیر کلیک کنید.
http://s3.picofile.com/file/7873156020/z...4.zip.html
تغییرات
>> تغییر کلاس validator
>> افزودن ویجت انتخاب زبان
>> تکمیل بخش ورود به سایت و خروج (پلاگین user)