Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obsluga sesji oraz uzytkownika, PHP4
camikazee
post 3.08.2007, 19:01:29
Post #1





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Witam!

Napisalem sobie prosta klase obslugi sesji oraz uzytkownika. Co prawda zawieraja podstawowe metody. Jeszcze beda dopisywane. Chcialbym najpierw jednak by bardziej doswiedczeni koledzy wypowiedzieli sie czy sa jakies bledy. Np gnerowanie zbyt duzej ilosci zapytan do bazy itp.



klasa sesji

  1. <?php
  2.  /**
  3.  * @version $v1.0 - Session class $
  4.  * @copyright Copyright (C) 2007 by camikazee. All rights reserved.
  5.  */
  6.  
  7.  class Session
  8.  {
  9.  var $_sessionId = NULL;
  10.  var $_sessionLife = 3600;
  11.  var $_sessionFreeze = 180;
  12.  var $_userId;
  13.  var $_IsLoggedIn = false;
  14.  var $_dbHandle;
  15.  var $_userBrowser;
  16.  var $_userIP;
  17.  
  18.  
  19.  /**
  20. * Konstruktor klasy Session
  21. * @param $dbHandle
  22. * @return Session
  23. */
  24.  
  25.  function Session($dbHandle) {
  26. $this->_dbHandle = $dbHandle;
  27.  
  28. // Pobieram dane o uzytkowniku
  29. $this->_userBrowser = $GLOBALS['HTTP_USER_AGENT'];
  30. $this->_userIP = $_SERVER['REMOTE_ADDR'];
  31.  
  32. // Inicjuje sesje
  33. array(&$this, '_session_open'),
  34. array(&$this, '_session_close'),
  35. array(&$this, '_session_read'),
  36. array(&$this, '_session_write'),
  37. array(&$this, '_session_destroy'),
  38. array(&$this, '_session_gc')
  39. );
  40.  
  41.  $this->_sessionId = session_id();
  42.  
  43.  
  44.  // Sprawdzam czy istnieje ciasteczko i czy jego wartosc ma 32 znaki
  45.  if ( isset($_COOKIE['PHPSESSID']) && strlen($_COOKIE['PHPSESSID']) == 32 ) {
  46.  
  47.  // Sprawdzam poprawnosc sesji
  48.  $sql = "SELECT session_id, session_user FROM ".TABLE_SESSION."
  49.  WHERE session_id = '".$this->_sessionId."'
  50.  AND UNIX_TIMESTAMP(NOW() - session_lastmove) < '".$this->_sessionLife."'
  51.  AND UNIX_TIMESTAMP(NOW()) <= (session_start + ".$this->_sessionLife.")
  52.  AND session_browser = '".$this->_userBrowser."'";
  53.  $dbResult = $this->_dbHandle->query($sql);
  54.  
  55.  // Znalazlem podejrzana sesje, usuwam ja i nadaje nowy identyfikator sesji
  56.  if ( $this->_dbHandle->numRows() == 0) {
  57.  $this->_session_destroy($this->_sessionId);
  58.  $this->_sessionId = session_id();
  59.  session_set_cookie_params($this->_sessionLife);
  60.  $this->createNewSession();
  61.  }
  62.  
  63.  // Sesja poprawna, przepisuje jej identyfikator oraz aktualizuje aktywnosc
  64.  else {
  65.  $this->_sessionId = $_COOKIE['PHPSESSID'];
  66.  $arrRow = $this->_dbHandle->fetchRows();
  67.  if ( $arrRow['session_user'] != 0 ) {
  68.  $this->_IsLoggedIn = true;
  69.  $this->_userId = $arrRow['session_user'];
  70.  }
  71.  $this->Impress();
  72.  }
  73.  }
  74.  
  75.  // Nie ma ciastka, tworze nowa sesje
  76.  else {
  77.  $this->createNewSession(); 
  78.  session_set_cookie_params($this->_sessionLife);
  79.  }  
  80.  }
  81.  
  82.  
  83.  /**
  84. * Update wpisu do bazy jezeli odnotowano ruch
  85. */
  86.  
  87.  function Impress() {
  88.  $this->_dbHandle->query("UPDATE ".TABLE_SESSION." SET session_lastmove = UNIX_TIMESTAMP(NOW())
  89. WHERE session_id = '{$this->_sessionId}'");
  90.  }
  91.  
  92.  
  93.  
  94.  /**
  95. * Metody sesyjne
  96. */
  97.  
  98.  function _session_open($save_path, $session_name) {
  99.  return (true);
  100.  }
  101.  
  102.  
  103.  function _session_close() {
  104.  $this->_session_gc($this->_sessionLife);
  105.  return (true);
  106.  }
  107.  
  108.  
  109. function _session_read($sessionId) {
  110. $this->_dbHandle->query("SELECT * FROM ".TABLE_SESSION_DATA."
  111.  WHERE sessionid = '$sessionId'");
  112. if ( $this->_dbHandle->numRows() > 0 ) {
  113. $arrRow = $this->_dbHandle->fetchRows();
  114. return (unserialize($arrRow['value']));
  115. }
  116. else {
  117. return '';
  118. }
  119.  }
  120.  
  121.  
  122.  function _session_write($sessionId, $data) {
  123.  $serData = serialize($data);
  124.  $this->_dbHandle->query("SELECT sessionid FROM ".TABLE_SESSION_DATA."
  125. WHERE sessionid = '$sessionId'");
  126.  if ( $this->_dbHandle->numRows() > 0 ) {
  127.  $this->_dbHandle->query("UPDATE ".TABLE_SESSION_DATA." SET value = '$serData'
  128.  WHERE sessionid = '$sessionId'");
  129.  }
  130.  else {
  131.  $this->_dbHandle->query("INSERT INTO ".TABLE_SESSION_DATA." (sessionid, value)
  132. VALUES('$sessionId', '$serData')");
  133.  }
  134. return (true);
  135.  }
  136.  
  137.  
  138.  function _session_destroy($id) {
  139.  $sql = "DELETE FROM ".TABLE_SESSION.
  140.  WHERE session_id = '$id'";
  141.  $dbResult = $this->_dbHandle->query($sql);
  142.  return (true);
  143.  }
  144.  
  145.  
  146.  function _session_gc($maxlifetime) {
  147.  $this->_dbHandle->query("DELETE FROM ".TABLE_SESSION."
  148. WHERE (UNIX_TIMESTAMP(NOW()) > session_start + ".$this->_sessionLife.")");
  149. $this->_dbHandle->query("DELETE FROM ".TABLE_SESSION_DATA."
  150. WHERE sessionid NOT IN(SELECT session_id FROM ".TABLE_SESSION.")"); 
  151.  return (true);
  152.  }  
  153.  
  154.  
  155. /**
  156.  * Tworze nowa sesje
  157.  */
  158. function createNewSession () {
  159. $sql = "INSERT INTO ".TABLE_SESSION."
  160. (session_id, session_user, session_ip, session_browser, session_start, sessi
    on_lastmove)
  161. VALUES('{$this->_sessionId}', '0', '{$this->_userIP}', '{$this->_userBrowser}', UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(NOW()))";
  162. $this->_dbHandle->query($sql);
  163. }
  164.  
  165.  
  166.  
  167.  /**
  168. * Pobieram identyfikatora sesji
  169. */
  170.  
  171.  function getSessionId() {
  172.  return $this->_sessionId;
  173.  }
  174.  
  175.  
  176.  
  177.  /**
  178. * Pobieram identyfikator zalogowanego uzytkownika
  179. */
  180.  
  181.  function getUserId() {
  182.  return $this->_userId;
  183.  }
  184.  
  185.  }
  186. ?>



z gory dziekuje za odpowiedzi smile.gif

Ten post edytował camikazee 3.08.2007, 19:06:51


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:20