Witam.
Piszę własną obsługę sesji. Już to kiedyś przerabiałem i mam nawet klasę która się tym zajmuje.
Jednak odświeżając wiedzę na ten temat trafiłem na sprzeczność. Mianowicie podobno prawie wszystkie handlery muszą zwracać bolowskie true.
Natomiast w mojej klasie która pisałem jakieś półtora roku temu owe handlery zwracają niekiedy różne wartości ( przeważnie liczbowe )
Wiem że zostaną one przekonwertowane do wartości logicznych, ale w takim razie po diabła zwracać cokolwiek oprócz true skoro na stronie:
http://www.hudzilla.org/phpbook/read.php/10_3_7Cytat
All the functions return true except sess_read()
pragnę dodać że tą klasę mimo iż pisałem ją dosyć dawno temu to z książką w łapie - niestety tytułu nie pamiętam.
Więc jak to jest z tym wartościami zwracanymi?
- Przy okazji prosiłbym o hmm zerknięcie na kod klasy Session i wyrażenie swojej opinii
<?php
class Session
{
/**
* @var DDHandler
*/
protected $db;
/**
* Used to store unserialized session data
* @var array
*/
protected $_sess_data;
/**
* Class Constructor
* @return Session
*/
public function __construct()
{
$this->db = DB::getDriver();
array(&$this, '_destroy'), );
if(!$ok) {
Event::trigger('ERR_SESSION_SET_SAVE_HANDLER_FAILED');
}
// Set random _gc() method to be triggered every time
ini_set('session.gc_divisor', 1000
); ini_set('session.gc_probability', 1000
); }
/**
* Called by session_start()
* @param string $save_path
* @param string $session_name
* @return boolean true
*/
public function _open($save_path, $session_name)
{
return true;
}
/**
* Called at page end
* @return integer
*/
public function _close()
{
return true;
}
/**
* Called after session_start()
* Have to return serializaed session data or empty string
* Reads session data automaticly when class is created and saves all data to
* local variable accessed with methods remove(), set() and get()
* @param integer $session_id
* @return string
*/
public function _read($session_id)
{
$result = $this->db->query('SELECT * FROM '.DB_PREFIX.'session WHERE sess_id=''.$session_id.''');
if($result->columnCount() > 0)
{
$session_data = $result->fetch();
$this->_sess_data
= unserialize($session_data['sess_value']); foreach($session_data as $key => $value)
{
$this->_sess_data[$key] = $value;
}
$out = $session_data['sess_value'];
} else {
$out = '';
}
return $out;
}
/**
* Called when session data is to be written
* Always returns true
* @param integer $session_id
* @param string $session_data
* @return boolean
*/
public function _write($session_id, $session_data)
{
$row = $this->db->query('SELECT COUNT(*) as count FROM '.DB_PREFIX.'session WHERE sess_id=''.$session_id.''')->fetch();
if($row['count'] > 0)
{
$result = $this->db->query('UPDATE '.DB_PREFIX.'session SET
sess_last_update=CURRENT_TIMESTAMP(),
sess_value=''.$session_data.'' WHERE sess_id=''.$session_id.''');
$out = $this->db->affectedRows() > 0 ? true : false;
}
else
{
if(isset($this->_sess_data
['user_id'])) { $user_id = $this->_sess_data['user_id'];
} else {
$user_id = 0;
}
$result = $this->db->query('INSERT INTO '.DB_PREFIX.'session
(sess_id, sess_start, sess_last_update, sess_value, user_id, user_ip)
VALUES(''.$session_id.'', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), ''.$session_data.'', ''.$user_id.'', ''.$_SERVER['REMOTE_ADDR'].'')');
$out = $this->db->affectedRows() > 0 ? true : false;
}
return $out;
}
/**
* Called by session_destroy()
* @param integer $session_id
* @return boolean
*/
public function _destroy($session_id)
{
$result = $this->db->query('DELETE FROM '.DB_PREFIX.'session WHERE sess_id=''.$session_id.''');
return $this->db->affectedRows() > 0 ? true : false;
}
/**
* Called randomly
* Removes stored sessions which last update is longer than $maxlifetime param
* @param integer $maxlifetime
* @return integer
*/
public function _gc($maxlifetime)
{
$this->db->query('DELETE FROM '.DB_PREFIX.'session WHERE sess_last_update < ''.$sess_live_time.''');
return $this->db->affectedRows();
}
// ----------------- //
// SETTERS & GETTERS //
// ----------------- //
/**
* Removes stored session data
* @param string $session_variable_id
*/
public function remove($session_variable_id)
{
if(isset($this->_sess_data
[$session_variable_id])) { unset($this->_sess_data
[$session_variable_id]); }
}
/**
* Creates new session variable or changes the value of existing one
* @param string $session_variable_id
* @param misc $value
*/
public function set($session_variable_id, $value)
{
$this->_sess_data[$session_variable_id] = $value;
}
/**
* Returns session variable identified by $session_variable_id
* @param string $session_variable_id
* @return misc
*/
public function get($session_variable_id)
{
if(isset($this->_sess_data
[$session_variable_id])) { return $this->_sess_data[$session_variable_id];
}
}
?>
Ten post edytował orglee 14.04.2008, 10:53:45