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_7
Cytat
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(); ); if(!$ok) { Event::trigger('ERR_SESSION_SET_SAVE_HANDLER_FAILED'); } // Set random _gc() method to be triggered every time } /** * 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(); 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 { $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) { } } /** * 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) { return $this->_sess_data[$session_variable_id]; } } ?>