<?php
/********************************
System obsługi sesji *
Autor: Damned Land Team *
Stworzono: 2007-03-13 19.05 *
********************************/
#Interfejs httpRequest
interface _httpRequest
{
/*Konstruktor przpisze wartości*/
public function __construct();
/*Zwróć ip usera*/
public function turnIp();
/*Zwróć dane o systemach usera */
public function turnBrowser();
/*Test na bota*/
public function checkBot();
/*Destruktor klasy*/
public function __destruct();
}
#Interfejs Session
interface _Session
{
/*Konstruktor klasy
[(bool)$status]-TRUE(nietwozyc sesji anonimowego usera)*/
public function __construct($status=false);
/*Funkcja tworzy sesje*/
public function create();
/*Funkcja kończy sesje*/
public function finalSession();
/*Funkcja zwraca ID użytkownika sesji*/
public function turnUserId();
/*Sprawdza czy sesja jest aktywna i zwraca
(bool)true lub (bool)false*/
public function checkActiv();
/*Zwraca id sesji*/
public function turnSessId();
/*Funkcja zrzucająca sesje do pliku
Zapisuje w sposób
**|**|**|**|**
[(string)$dir]-katalog dostępu*/
public function dropToFile($toDir='./');
/*Uaktualnij ostatnią wizyte*/
public function sessionUpdate();
}
#Klasa załaduje dane o użytkowniku
Class httpRequest implements _httpReuest
{
#Wymagane zmienne
#IP użytkownika
private $ip;
#Dane o przegląadarce i systemie
private $browser;
#test na bota
private $scout;
public function __construct()
{
$this -> ip = $_SERVER['REMOTE_ADDR'];
$this -> browser = $_SERVER['HTTP_USER_AGENT'];
$this -> scout = '';
}
final public function turnIp()
{
return $this -> ip;
}
final public function turnBrowser()
{
return $this -> browser;
}
final public function checkBot()
{
$this -> scout = '/(googlebot|slurp@inktomi|ask jeeves|lycos|whatuseek|ia_archiver)/i';
return ((preg_match($this->scout, $this->browser, $match)) ?
true : false); }
public function __destruct()
{
}
}
#Zdefiniuj stałe wartości
#Nazwa SESJI
define('COOKIENAME', 'PT_SESSION');
#Klasa obsługi sesji
Class Session implements _Session
{
public $request;
private $test;
public function __construct($status=true)
{
#Odwołaj sie do klasy httpRequest;
$this->request = new httpRequest;
$this->test = @mysql_fetch_assoc(mysql_query("SELECT sess_id, sess_time, sessuser_id FROM session WHERE sess_id='".$_SESSION[COOKIENAME
]."'")); #Sprawdz czy ma towyrzyć sesje
if ($status==true && !isset($this->test['sess_time'])) {
$this->create();
}
}
public function create($user=0)
{
#AND jest wymagany bo gdy jest brak wpisu w bazie to $this->test zwraca 0=FALSE
if (isset($this->test['sessuser_id']) && $this->test['sessuser_id'] == $user) {
return false;
}
#Połącz czas oraz ip(można losowa liczba ale wtedy bedzie wieksza szansa na bug)
$data = COOKIENAME.$this->request->turnIp();
#Utwórz i zakoduj unikalne id z danych powyżej
#Utwórz sesje z uniqid
$_SESSION[COOKIENAME]=$data;
#Stwórz indeks sesji w bazie
if (isset($_SESSION[COOKIENAME
])) {
mysql_query("INSERT INTO session (sess_id, sessuser_id, sessuser_info, sessuser_ip, sess_time) VALUES ('".$data."',
".$user.",
'".$this->request->turnBrowser()."',
'".$this->request->turnIp()."',
}
}
public function finalSession()
{
if (!isset($_SESSION[COOKIENAME
])) {
return false;
}
else
{
unset($_SESSION[COOKIENAME
]); }
}
public function turnUserId()
{
echo $this->test['sessuser_id']; }
public function turnSessId()
{
if ($_SESSION[COOKIENAME
] != $this->test['sess_id'] || strlen($_SESSION[COOKIENAME
]) != 32
) {
return false;
}
else
{
return $this->test['sess_id'];
}
}
public function checkActiv()
{
return (isset($_SESSION[COOKIENAME
]) && isset($this->test['sess_time'])) ?
true : false; }
public function dropToFile($toDir='./')
{
$fileName = $toDir.date('Y-m-d').'.txt'; $file = @fopen($fileName, 'w'); echo (!$file) ?
false : true; fwrite($file, 'Zrzut sesji z dnia: '.date('Y-m-d H:i:s').', autor klasy do zrzutu daniel1302 ID sesji|ID użytkownika|Dane o przeglądarce i systemie|IP użytkownika|Data utwor
zenia|Ostatnia wizyta
');
{
fwrite($file, ''.$query['sess_id'].'|'.$query['sessuser_id'].'|'.$query['sessuser_info'].'|'.$query['sessuser_ip'].'|'.$query['sess_time'].'|'.$query['sess_lastvisit'].' ');
}
}
public function sessionUpdate()
{
mysql_query("UPDATE session SET sess_lastactiv=".time()." WHERE sess_id='".$this->test['sess_id']."'") }
}
?>
OOP zajmuje się jakieś 3-4 tygodnie(Napisałem już trochę). Proszę o ocenę i pomoc co zmienić
Nie piszcie, że lepsze są ciasteczka, ponieważ to jest dla mnie lepsze.
Opisy funkcji macie w interfejsach oraz na stronie
http://pastime.tivi.net.pl/team/php-files/...ead_id=246#2571