<?php
require_once(DIR."core/class/class.Cookie.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();
session_set_save_handler (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"));
}
function __destruct()
{
}
public function set($key, $value)
{
$this->_Data[$key] = $value;
}
public function __clone()
{
}
public static function singleton
() { if (!isset(self::$instance)) { $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
Workspace: Ubuntu 8.04, PDT.