Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * @package R4D1G1N3
- * @author Reactorx2
- * @version 0.2.0
- * @category Class
- * @name Session Manager
- * @description
- * <--(HU)--
- *
- * -->
- */
- if(!defined("ROOT"))die;
- define('SESSION_NEED_RELOAD_RIGHTS', 1);
- define('SESSION_IS_OK', 0);
- define('SESSION_INVALID_SESSIONID', -1);
- define('SESSION_NONEXISTENT_SESSION', -2);
- define('SESSION_REQUEST_TIMEOUT_EXPIRED', -3);
- define('SESSION_GLOBAL_TIMEOUT_EXPIRED', -4);
- abstract class SESSION_MANAGER{
- static private function Validate(){
- if(!isset($_COOKIE[SESSION_NAME])) return SESSION_NONEXISTENT_SESSION; else $sid = $_COOKIE[SESSION_NAME];
- $S = NEW MYSQL_SELECT();
- $S->execute('SELECT s_id, UNIX_TIMESTAMP(s_modified) as s_modified, s_remote_addr, s_check_remote_addr, s_http_user_agent, s_check_http_user_agent, s_rgt_modified FROM sessions WHERE s_hash = "'.STRINGS::Secure($sid).'" LIMIT 1');
- $r = $S->get_result_array(false);
- unset($S);
- if(count($r) == 0) return SESSION_NONEXISTENT_SESSION;
- else if($r[0]['s_modified'] + SESSION_GLOBAL_TIMEOUT < time()) return SESSION_GLOBAL_TIMEOUT_EXPIRED;
- else if($r[0]['s_modified'] + SESSION_REQUEST_TIMEOUT < time()) return SESSION_REQUEST_TIMEOUT_EXPIRED;
- else if( ($r[0]['s_check_http_user_agent'] == 1 && $r[0]['s_http_user_agent'] != $_SERVER['HTTP_USER_AGENT']) or
- ($r[0]['s_check_remote_addr'] == 1 && $r[0]['s_remote_addr'] != $_SERVER['REMOTE_ADDR'])) return SESSION_INVALID_SESSIONID;
- else if($r[0]['s_rgt_modified'] == 1) return SESSION_NEED_RELOAD_RIGHTS;
- return SESSION_IS_OK;
- }
- static private function Delete_garbage(){
- $Q = NEW MYSQL_QUERY();
- $Q->execute('DELETE FROM sessions WHERE UNIX_TIMESTAMP(s_modified)+'.SESSION_GLOBAL_TIMEOUT.' < '.time().' LIMIT 10');
- unset($Q);
- }
- static public function Auth($u_id = null){
- $old_sid = session_id();
- session_regenerate_id(true);
- $new_sid = session_id();
- $Q = NEW MYSQL_QUERY();
- $Q->execute('UPDATE sessions SET s_hash = "'.$new_sid.'", s_u_id='.(is_null($u_id)?'null':'"'.$u_id.'"').' , s_rgt_modified = 1 WHERE s_hash = "'.$old_sid.'" LIMIT 1');
- unset($Q);
- }
- static public function Manage(){
- switch(self::Validate()){
- case SESSION_IS_OK:
- self::Update();
- break;
- case SESSION_GLOBAL_TIMEOUT_EXPIRED:
- self::RegisterNew();
- break;
- case SESSION_REQUEST_TIMEOUT_EXPIRED:
- break;
- case SESSION_NONEXISTENT_SESSION:
- self::RegisterNew();
- break;
- case SESSION_INVALID_SESSIONID:
- self::RegisterNew();
- break;
- case SESSION_NEED_RELOAD_RIGHTS:
- self::Update(true);
- USER_MANAGER::LoadRights();
- break;
- default:
- die('Error in session management');
- break;
- }
- }
- static private function RegisterNew($chk_ua=true, $chk_ra=false){
- setcookie(SESSION_NAME,'',time()-3600);
- self::Delete_garbage();
- session_start();
- $new_sessId = session_id();
- $c = array(
- 's_hash' => $new_sessId,
- 's_http_user_agent' => STRINGS::Secure($_SERVER['HTTP_USER_AGENT']),
- 's_check_http_user_agent' => $chk_ua,
- 's_remote_addr' => STRINGS::Secure($_SERVER['REMOTE_ADDR']),
- 's_check_remote_addr' => $chk_ra,
- 's_added' => 'NOW()',
- 's_modified' => 'NOW()'
- );
- $al = AUTOLOGIN::Check();
- if(!is_null($al)){
- $_SESSION['USER'] = new USER($al['u_id'], $al['u_name']);
- $c['s_u_id'] = $al['u_id'];
- } else $_SESSION['USER'] = new USER();
- $_SESSION['SETTINGS'] = new SETTINGS();
- $rns_i = new MYSQL_INSERT();
- $rns_i->insert_record("sessions", $c, array('s_added'=>true, 's_modified'=>true));
- unset($rns_i);
- }
- static private function Update($reset_rgts=false){
- session_start();
- $sid = session_id();
- $Q = NEW MYSQL_QUERY();
- $Q->execute('UPDATE sessions SET s_modified = NOW() '.(($reset_rgts)?', s_rgt_modified = 0 ':'').' WHERE s_hash = "'.$sid.'" LIMIT 1');
- unset($Q);
- $_SESSION['SETTINGS']->Update();
- }
- static public function Destroy(){
- $sid = session_id();
- $Q = NEW MYSQL_QUERY();
- $Q->execute('DELETE FROM sessions WHERE s_hash = "'.$sid.'" LIMIT 1');
- session_destroy();
- unset($Q);
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement