Advertisement
rav1989

Untitled

Apr 25th, 2011
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.33 KB | None | 0 0
  1. <?php
  2.  
  3. define('COOKIE_EXPIRE', 3600); // 1 godzina
  4. define('COOKIE_NAME', 'PHPSESSID');
  5.  
  6. class Sesja{
  7.     private $token;
  8.     private $user;
  9.     private $ip;
  10.     private $browser;
  11.     private $time;
  12.  
  13.     function __construct(){
  14.         global $pdo, $request;
  15.         if(!isset($_COOKIE[COOKIE_NAME]))
  16.         {
  17.             $this -> create();
  18.         }
  19.         $stmt = $pdo -> prepare('SELECT users_id, ip, browser, time FROM '.MySql_TPrefix.'sesja WHERE
  20.                     token = :stoken AND
  21.                     ip = :sip AND
  22.                     browser = :sbrowser AND
  23.                     time > :time
  24.                     ');
  25.         $stmt -> bindValue(':stoken',  $_COOKIE[COOKIE_NAME], PDO::PARAM_STR);
  26.         $stmt -> bindValue(':sip', $request -> getIp(), PDO::PARAM_STR);
  27.         $stmt -> bindValue(':sbrowser', $request -> getBrowser(), PDO::PARAM_STR);
  28.         $stmt -> bindValue(':time', time() - COOKIE_EXPIRE, PDO::PARAM_INT);
  29.         $stmt -> execute();
  30.  
  31.         if($session = $stmt -> fetch(PDO::FETCH_ASSOC))
  32.         {
  33.             $stmt -> closeCursor();
  34.             $this -> token = $_COOKIE[COOKIE_NAME];
  35.             $this -> ip = $session['ip'];
  36.             $this -> browser = $session['browser'];
  37.             $this -> time = $session['time'];
  38.             $stmt = $pdo -> prepare('UPDATE '.MySql_TPrefix.'sesja SET
  39.                     time = :time WHERE token = :stoken');
  40.             $stmt -> bindValue(':stoken', $_COOKIE[COOKIE_NAME], PDO::PARAM_STR);
  41.             $stmt -> bindValue(':time', time(), PDO::PARAM_INT);
  42.             $stmt -> execute();
  43.             if($session['users_id'] == 0)
  44.             {
  45.                 // sesja anonimowa
  46.                 $this -> user = new user(true);
  47.             }
  48.             else
  49.             {
  50.                 // sesja zalogowanego
  51.                 $stmt = $pdo -> prepare('SELECT id, email, nazwa, haslo, opis, avatar, mode FROM '.MySql_TPrefix.'users WHERE id=:uid');
  52.                 $stmt -> bindValue(':uid', $session['users_id'], PDO::PARAM_INT);
  53.                 $stmt -> execute();
  54.                 $stmt -> setFetchMode(PDO::FETCH_CLASS, 'User', array(0 => false));
  55.                 if($this -> user = $stmt -> fetch())
  56.                 {
  57.                     $stmt -> closeCursor();
  58.                 }
  59.                 else
  60.                 {
  61.                     $stmt -> closeCursor();
  62.                     $this -> Create();
  63.                 }
  64.             }
  65.         }
  66.         else
  67.         {
  68.             $stmt -> closeCursor();
  69.             $this -> Create();
  70.         }
  71.     }
  72.  
  73.     private function Create()
  74.     {
  75.         global $pdo, $request;
  76.         $this -> garbageCollector();
  77.  
  78.         $this -> token = $_COOKIE[COOKIE_NAME];
  79.         $stmt = $pdo -> prepare('INSERT INTO `'.MySql_TPrefix.'sesja` (token, ip, browser, time, users_id) VALUES (:token, :ip, :browser, :time, 0)');
  80.         $stmt -> bindValue(':token', $this -> token, PDO::PARAM_STR);
  81.         $stmt -> bindValue(':ip', $request -> getIp(), PDO::PARAM_STR);
  82.         $stmt -> bindValue(':browser', $request -> getBrowser(), PDO::PARAM_STR);
  83.         $stmt -> bindValue(':time', time(), PDO::PARAM_INT);
  84.         $stmt -> execute();
  85.         $this -> user = new User(true);
  86.     }
  87.  
  88.     public function Update(User $user)
  89.     {
  90.         global $pdo;
  91.  
  92.         if($user -> isAnonymous())
  93.         {
  94.             if($this -> user -> isAnonymous())
  95.             {
  96.                 throw new Exception('Próba przerejestrowania anonimowego użytkownika!');
  97.             }
  98.         }
  99.         $this->user = $user;
  100.         $stmt = $pdo -> prepare('UPDATE '.MySql_TPrefix.'sesja SET
  101.                 users_id = :id WHERE token = :stoken');
  102.         $stmt -> bindValue(':stoken', $_COOKIE[COOKIE_NAME], PDO::PARAM_STR);
  103.         $stmt -> bindValue(':id', $user->getId(), PDO::PARAM_INT);
  104.         $stmt -> execute();
  105.  
  106.     }
  107.  
  108.  
  109.  
  110.  
  111.     private function garbageCollector()
  112.     {
  113.         global $pdo;
  114.         $pdo -> exec('DELETE FROM `'.MySql_TPrefix.'sesja` WHERE time < '.(time() - COOKIE_EXPIRE));
  115.     }
  116.  
  117.     public function getUser()
  118.     {
  119.         return $this -> user;
  120.     }
  121. }
  122.  
  123. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement