Wykorzystałem klasę Usersession do obsługi sesji w bazie (z podręcznika PHP5 zaawansowane programowanie)
Klasę umieściłem w kohanie 3.2 jako moduł i generalnie wszystko było ok.
Chciałem jednak użyć modułu database i podłączyć się przez pdo zamiast pg_connect ....
Generalnie wszystko (logowanie i sesje w bazie) działa ale po tej zmianie pod koniec strony mam
Fatal error: Exception thrown without a stack frame in Unknown on line 0kod usersession.php
<?php defined('SYSPATH') or
die('No direct script access.'); class Kohana_Usersession {
private $php_session_id;
public $native_session_id;
private $dbhandle;
private $logged_in;
private $user_id;
private $session_timeout = 600; # 10 minutowy maksymalny czas nieaktywno?ci sesji
private $session_lifespan = 3600; # 1 godzinny maksymalny czas trwania sesji.
public function __construct() {
$this->dbhandle=Database::instance();
array(&$this, '_session_open_method'), array(&$this, '_session_close_method'), array(&$this, '_session_read_method'), array(&$this, '_session_write_method'), array(&$this, '_session_destroy_method'), array(&$this, '_session_gc_method') );
$strUserAgent = $_SERVER["HTTP_USER_AGENT"];
$IP = $_SERVER['REMOTE_ADDR'];
if (isset($_COOKIE['PHPSESSID'])) { $this->php_session_id = $_COOKIE["PHPSESSID"];
$stmt = "SELECT id FROM sesja_uzytkownika WHERE identyfikator_sesji_ascii = '" . $this->php_session_id . "' AND ((now() - utworzono) < ' " . $this->session_lifespan . " seconds') AND ip='".$IP."' AND user_agent='" . $strUserAgent . "' AND ((now() - ostatnia_reakcja) <= '".$this->session_timeout." seconds' OR ostatnia_reakcja IS NULL)";
$result=$this->dbhandle->query(Database::SELECT,$stmt,false)->as_array();
$failed = 1;
$result=$this->dbhandle->query(Database::UPDATE,"UPDATE sesja_uzytkownika SET zalogowany=false WHERE (now() - utworzono) > ' " . $this->session_lifespan . " seconds'",false);
$result=$this->dbhandle->query(Database::DELETE,"DELETE FROM \"zmienna_sesji\" WHERE identyfikator_sesji NOT IN (SELECT id FROM \"sesja_uzytkownika\")",false);
unset($_COOKIE['PHPSESSID']); };
};
}
public function Impress() {
if ($this->native_session_id) {
$result=$this->dbhandle->query(Database::UPDATE,"UPDATE \"sesja_uzytkownika\" SET ostatnia_reakcja = now() WHERE id = " . $this->native_session_id,false);
};
}
public function IsLoggedIn() {
return($this->logged_in);
}
public function Get_native_id(){
return($this->native_session_id);
}
public function GetUserID() {
if ($this->logged_in) {
return($this->user_id);
} else {
return(false);
};
}
public function GetUserObject() {
if ($this->logged_in) {
if (class_exists("user")) {
$objUser = new User($this->user_id);
return($objUser);
} else {
return(false);
};
};
}
public function GetSessionIdentifier() {
return($this->php_session_id);
}
public function Login($strUsername, $strPlainPassword) {
// $strMD5Password = md5($strPlainPassword);
$strMD5Password = $strPlainPassword;
$strUsername = trim($strUsername);
$strPlainPassword = trim($strPlainPassword); $strPlainPassword = strip_tags($strPlainPassword); $strPlainPassword = str_replace('DELETE','j',$strPlainPassword); $strPlainPassword = str_replace('UPDATE','j',$strPlainPassword); $strPlainPassword = str_replace('INSERT','j',$strPlainPassword); $strPlainPassword = str_replace('SELECT','j',$strPlainPassword); $strPlainPassword = str_replace('delete','j',$strPlainPassword); $strPlainPassword = str_replace('update','j',$strPlainPassword); $strPlainPassword = str_replace('insert','j',$strPlainPassword); $strPlainPassword = str_replace('select','j',$strPlainPassword);
$stmt = "SELECT id FROM \"uzytkownik\" WHERE nazwa_uzytkownika = '$strUsername' AND md5_haslo = '$strMD5Password'";
$result=$this->dbhandle->query(Database::SELECT,$stmt,false)->as_array();
foreach($result as $row){
$this->user_id = $row["id"];
$this->logged_in = true;
$result=$this->dbhandle->query(Database::UPDATE,"UPDATE \"sesja_uzytkownika\" SET zalogowany = true, identyfikator_uzytkownika = " . $this->user_id . " WHERE id = " . $this->native_session_id,false);
}
return(true);
} else {
return(false);
};
}
public function LogOut() {
if ($this->logged_in == true) {
$result=$this->dbhandle->query(Database::UPDATE,"UPDATE \"sesja_uzytkownika\" SET zalogowany = false WHERE id = " . $this->native_session_id,false);
$this->logged_in = false;
$this->user_id = 0;
return(true);
} else {
return(false);
};
}
public function _unset($zmienna){
$result=$this->dbhandle->query(Database::DELETE,"DELETE FROM zmienna_sesji WHERE nazwa_zmiennej = '".$zmienna."' AND identyfikator_sesji=".$this->native_session_id,false);
return($result);
}
public function __get($nm) {
$result=$this->dbhandle->query(Database::SELECT,"SELECT wartosc_zmiennej FROM zmienna_sesji WHERE identyfikator_sesji = " . $this->native_session_id . " AND nazwa_zmiennej = '" . $nm . "'",false)->as_array();
foreach($result as $row){
}
} else {
return(false);
};
}
public function __set($nm, $val) {
$stmt = "INSERT INTO zmienna_sesji(identyfikator_sesji, nazwa_zmiennej, wartosc_zmiennej) VALUES(" . $this->native_session_id . ", '$nm', '$strSer')";
$result=$this->dbhandle->query(Database::INSERT,$stmt,false);
}
private function _session_open_method($save_path, $session_name) {
# Do nothing
return(true);
}
private function _session_close_method() {
return(true);
}
private function _session_read_method($id) {
$strUserAgent = $_SERVER["HTTP_USER_AGENT"];
$IP = $_SERVER['REMOTE_ADDR'];
$this->php_session_id = $id;
$failed = 1;
$result=$this->dbhandle->query(Database::SELECT,"SELECT id, zalogowany, identyfikator_uzytkownika FROM \"sesja_uzytkownika\" WHERE identyfikator_sesji_ascii = '$id'",false)->as_array();
foreach($result as $row){
$this->native_session_id = $row["id"];
if ($row["zalogowany"]=="t") {
$this->logged_in = true;
$this->user_id = $row["identyfikator_uzytkownika"];
} else {
$this->logged_in = false;
};
}
} else {
$this->logged_in = false;
$result=$this->dbhandle->query(Database::INSERT,"INSERT INTO sesja_uzytkownika(identyfikator_sesji_ascii, zalogowany, identyfikator_uzytkownika, utworzono, user_agent, ip) VALUES ('$id','f',0,now(),'$strUserAgent','$IP')",false);
$result=$this->dbhandle->query(Database::SELECT,"SELECT id from \"sesja_uzytkownika\" WHERE identyfikator_sesji_ascii = '$id'",false)->as_array();
foreach($result as $row){
$this->native_session_id = $row["id"];
}
};
return("");
}
private function _session_write_method($id, $sess_data) {
return(true);
}
private function _session_destroy_method($id) {
$result=$this->dbhandle->query(Database::DELETE,"DELETE FROM \"sesja_uzytkownika\" WHERE identyfikator_sesji_ascii = '.$id.'",false);
return($result);
}
private function _session_gc_method($maxlifetime) {
return(true);
}
public function __destruct(){
}
}
Jak to zdiagnozować
Ten post edytował bobi194 8.09.2011, 13:15:33