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
<?php /** * @version $v1.0 - Session class $ * @copyright Copyright (C) 2007 by camikazee. All rights reserved. */ class Session { var $_sessionId = NULL; var $_sessionLife = 3600; var $_sessionFreeze = 180; var $_userId; var $_IsLoggedIn = false; var $_dbHandle; var $_userBrowser; var $_userIP; /** * Konstruktor klasy Session * * @param $dbHandle * @return Session */ function Session($dbHandle) { $this->_dbHandle = $dbHandle; // Pobieram dane o uzytkowniku $this->_userBrowser = $GLOBALS['HTTP_USER_AGENT']; $this->_userIP = $_SERVER['REMOTE_ADDR']; // Inicjuje sesje ); // Sprawdzam czy istnieje ciasteczko i czy jego wartosc ma 32 znaki // Sprawdzam poprawnosc sesji $sql = "SELECT session_id, session_user FROM ".TABLE_SESSION." WHERE session_id = '".$this->_sessionId."' AND UNIX_TIMESTAMP(NOW() - session_lastmove) < '".$this->_sessionLife."' AND UNIX_TIMESTAMP(NOW()) <= (session_start + ".$this->_sessionLife.") AND session_browser = '".$this->_userBrowser."'"; $dbResult = $this->_dbHandle->query($sql); // Znalazlem podejrzana sesje, usuwam ja i nadaje nowy identyfikator sesji if ( $this->_dbHandle->numRows() == 0) { $this->_session_destroy($this->_sessionId); $this->createNewSession(); } // Sesja poprawna, przepisuje jej identyfikator oraz aktualizuje aktywnosc else { $this->_sessionId = $_COOKIE['PHPSESSID']; $arrRow = $this->_dbHandle->fetchRows(); if ( $arrRow['session_user'] != 0 ) { $this->_IsLoggedIn = true; $this->_userId = $arrRow['session_user']; } $this->Impress(); } } // Nie ma ciastka, tworze nowa sesje else { $this->createNewSession(); } } /** * Update wpisu do bazy jezeli odnotowano ruch */ function Impress() { $this->_dbHandle->query("UPDATE ".TABLE_SESSION." SET session_lastmove = UNIX_TIMESTAMP(NOW()) WHERE session_id = '{$this->_sessionId}'"); } /** * Metody sesyjne */ function _session_open($save_path, $session_name) { return (true); } function _session_close() { $this->_session_gc($this->_sessionLife); return (true); } function _session_read($sessionId) { $this->_dbHandle->query("SELECT * FROM ".TABLE_SESSION_DATA." WHERE sessionid = '$sessionId'"); if ( $this->_dbHandle->numRows() > 0 ) { $arrRow = $this->_dbHandle->fetchRows(); } else { return ''; } } function _session_write($sessionId, $data) { $this->_dbHandle->query("SELECT sessionid FROM ".TABLE_SESSION_DATA." WHERE sessionid = '$sessionId'"); if ( $this->_dbHandle->numRows() > 0 ) { $this->_dbHandle->query("UPDATE ".TABLE_SESSION_DATA." SET value = '$serData' WHERE sessionid = '$sessionId'"); } else { $this->_dbHandle->query("INSERT INTO ".TABLE_SESSION_DATA." (sessionid, value) VALUES('$sessionId', '$serData')"); } return (true); } function _session_destroy($id) { $sql = "DELETE FROM ".TABLE_SESSION." WHERE session_id = '$id'"; $dbResult = $this->_dbHandle->query($sql); return (true); } function _session_gc($maxlifetime) { $this->_dbHandle->query("DELETE FROM ".TABLE_SESSION." WHERE (UNIX_TIMESTAMP(NOW()) > session_start + ".$this->_sessionLife.")"); $this->_dbHandle->query("DELETE FROM ".TABLE_SESSION_DATA." WHERE sessionid NOT IN(SELECT session_id FROM ".TABLE_SESSION.")"); return (true); } /** * Tworze nowa sesje */ function createNewSession () { $sql = "INSERT INTO ".TABLE_SESSION." (session_id, session_user, session_ip, session_browser, session_start, sessi
on_lastmove) VALUES('{$this->_sessionId}', '0', '{$this->_userIP}', '{$this->_userBrowser}', UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(NOW()))"; $this->_dbHandle->query($sql); } /** * Pobieram identyfikatora sesji */ function getSessionId() { return $this->_sessionId; } /** * Pobieram identyfikator zalogowanego uzytkownika */ function getUserId() { return $this->_userId; } } ?>
z gory dziekuje za odpowiedzi
