<?php class Session { private $_sessionID; private $_session_lifetime = 3600; private $_table_name; private $_Data; private $_userID; private function __construct() { $this->_table_name = SQL_PREFIX.'sessions'; $Cookie = Cookie::singleton(); } function __destruct() { } public function set($key, $value) { $this->_Data[$key] = $value; } public function __clone() { } $c = __CLASS__; self::$instance = new $c; } return self::$instance; } private function _session_open_method($save_path, $session_name) { return true; } public function _session_close_method() { return true; } public function _session_gc_method($maxlifetime) { return true; } public function _session_read_method($session_id) { $this->_sessionID = $session_id; $db = Database::singleton(); $this->_deleteOldSessions(); $sql = "SELECT `user_id`, `vars` FROM `".$this->_table_name."` WHERE `phpsession_id` = '".$this->_sessionID."';"; $row = $db->getRow($sql); if($row) { $this->_userID = $row['user_id']; } else // jesli nie ma rekordu w bazie { $sql = "INSERT INTO `".$this->_table_name."` (`phpsession_id`, `user_id`, `vars`, `date_created`) VALUES ('".$this->_sessionID."', '".$this->_userID."', '', NOW());"; $db->Execute($sql); // wstawia rekord z sesja do bazy } $_SESSION =& $this->_Data; return ''; } public function _session_write_method($session_id, $session_data='') { foreach ($this->_Data as $k => $v) { } $sql = "UPDATE `".$this->_table_name."` SET `last_active` = now(), `vars`='".$data."' , `user_id`='".$this->_userID."' WHERE `phpsession_id` = '".$this->_sessionID."' LIMIT 1;"; $db = Database::singleton(); $db->Execute($sql); return true; } public function _session_destroy_method($session_id) { $sql = "DELETE FROM `".$this->_table_name."` WHERE `phpsession_id` = '".$session_id."';"; //Data::singleton()->add("sql", $sql); $db = Database::singleton(); $db->Execute($sql); Cookie::singleton()->delete('PHPSESSID'); $this->_sessionID = false; $this->_dbID = false; $this->_userID = false; return true; } private function _deleteOldSessions() { $sql = "DELETE FROM `".$this->_table_name."` WHERE (now() - `date_created`) >= '".$this->_session_lifetime."';"; $rs = Database::singleton()->getRow($sql); return true; } public function setUserID($uid) { $this->_userID = $uid; } public function getUserID() { return ($this->_userID) ? $this->_userID : false; } } ?>
Mam z tym pewnien, problem. Gdy mam to na webservie - php 5.1.5, wszystko działa poprawnie zapisuje dane w bazie, odczytuje.
Jak wrzuciłem na serwer z php 5.1.6 to też wszystko działa z wyjątkiem jednej rzeczy - write. Nie wiem o co chodzi, męcze się już z tym od 2h. Poczytałem trochę forum i manuala i dodałem nast rzeczy: __destruct, która zamyka i zapisuje sesje(problem z php >= 5.0.5) oraz dodawanie slashy. Lecz nadal to nie działa

Doszedłem do wniosku, że on wogóle nie wywołuje tej funkcji write.
Z góry dziękuje za pomoc.
Pozdrawiam, Kamil