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 0
kod usersession.php
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(); ); $strUserAgent = $_SERVER["HTTP_USER_AGENT"]; $IP = $_SERVER['REMOTE_ADDR']; $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); }; }; } 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; $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ć