Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- define('COOKIE_EXPIRE', 3600); // 1 godzina
- define('COOKIE_NAME', 'PHPSESSID');
- class Sesja{
- private $token;
- private $user;
- private $ip;
- private $browser;
- private $time;
- function __construct(){
- global $pdo, $request;
- if(!isset($_COOKIE[COOKIE_NAME]))
- {
- $this -> create();
- }
- $stmt = $pdo -> prepare('SELECT users_id, ip, browser, time FROM '.MySql_TPrefix.'sesja WHERE
- token = :stoken AND
- ip = :sip AND
- browser = :sbrowser AND
- time > :time
- ');
- $stmt -> bindValue(':stoken', $_COOKIE[COOKIE_NAME], PDO::PARAM_STR);
- $stmt -> bindValue(':sip', $request -> getIp(), PDO::PARAM_STR);
- $stmt -> bindValue(':sbrowser', $request -> getBrowser(), PDO::PARAM_STR);
- $stmt -> bindValue(':time', time() - COOKIE_EXPIRE, PDO::PARAM_INT);
- $stmt -> execute();
- if($session = $stmt -> fetch(PDO::FETCH_ASSOC))
- {
- $stmt -> closeCursor();
- $this -> token = $_COOKIE[COOKIE_NAME];
- $this -> ip = $session['ip'];
- $this -> browser = $session['browser'];
- $this -> time = $session['time'];
- $stmt = $pdo -> prepare('UPDATE '.MySql_TPrefix.'sesja SET
- time = :time WHERE token = :stoken');
- $stmt -> bindValue(':stoken', $_COOKIE[COOKIE_NAME], PDO::PARAM_STR);
- $stmt -> bindValue(':time', time(), PDO::PARAM_INT);
- $stmt -> execute();
- if($session['users_id'] == 0)
- {
- // sesja anonimowa
- $this -> user = new user(true);
- }
- else
- {
- // sesja zalogowanego
- $stmt = $pdo -> prepare('SELECT id, email, nazwa, haslo, opis, avatar, mode FROM '.MySql_TPrefix.'users WHERE id=:uid');
- $stmt -> bindValue(':uid', $session['users_id'], PDO::PARAM_INT);
- $stmt -> execute();
- $stmt -> setFetchMode(PDO::FETCH_CLASS, 'User', array(0 => false));
- if($this -> user = $stmt -> fetch())
- {
- $stmt -> closeCursor();
- }
- else
- {
- $stmt -> closeCursor();
- $this -> Create();
- }
- }
- }
- else
- {
- $stmt -> closeCursor();
- $this -> Create();
- }
- }
- private function Create()
- {
- global $pdo, $request;
- $this -> garbageCollector();
- $this -> token = $_COOKIE[COOKIE_NAME];
- $stmt = $pdo -> prepare('INSERT INTO `'.MySql_TPrefix.'sesja` (token, ip, browser, time, users_id) VALUES (:token, :ip, :browser, :time, 0)');
- $stmt -> bindValue(':token', $this -> token, PDO::PARAM_STR);
- $stmt -> bindValue(':ip', $request -> getIp(), PDO::PARAM_STR);
- $stmt -> bindValue(':browser', $request -> getBrowser(), PDO::PARAM_STR);
- $stmt -> bindValue(':time', time(), PDO::PARAM_INT);
- $stmt -> execute();
- $this -> user = new User(true);
- }
- public function Update(User $user)
- {
- global $pdo;
- if($user -> isAnonymous())
- {
- if($this -> user -> isAnonymous())
- {
- throw new Exception('Próba przerejestrowania anonimowego użytkownika!');
- }
- }
- $this->user = $user;
- $stmt = $pdo -> prepare('UPDATE '.MySql_TPrefix.'sesja SET
- users_id = :id WHERE token = :stoken');
- $stmt -> bindValue(':stoken', $_COOKIE[COOKIE_NAME], PDO::PARAM_STR);
- $stmt -> bindValue(':id', $user->getId(), PDO::PARAM_INT);
- $stmt -> execute();
- }
- private function garbageCollector()
- {
- global $pdo;
- $pdo -> exec('DELETE FROM `'.MySql_TPrefix.'sesja` WHERE time < '.(time() - COOKIE_EXPIRE));
- }
- public function getUser()
- {
- return $this -> user;
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement