0) {ini_set (' Session.auto_start ', 0);} function Zen_session_open () {global $zen _session_db; $zen _session_db = new mysqli (' localhost ', ' root ', ' wh36524 ', ' phptest '); return TRUE;} function Zen_session_close () {global $zen _session_db; Return $zen _session_db, close ();} function Zen_session_read ($SID) {global $zen _session_db; $sql = ' Select Session_value from sessions where session_id= "'. $sid. '"; $query = $zen _session_db->query ($sql); if ($zen _session_db-errno) {die ($zen _session_db->error); } if ($query-num_rows = = 1) {$data = $query->fetch_assoc (); return $data [' Session_value ']; } else {return ""; }}function Zen_session_write ($sid, $data) {global $zen _session_db; $sql = ' SELECT count (*) from sessions where session_id= "'. $sid. '"; $query = $zen _session_db->query ($sql); if ($zen _session_db->errno) {die ($zen _session_db->error); } if ($query->num_rows &Gt 0) {$sql = ' update session set Session_value= '. $data. ', expire= '. ( Time () +60*60). ' Where session_id= '. $sid. ' "; $zen _session_db->query ($sql); } else {$sql = ' INSERT into session values ('. $sid. ' "," '. Time () +60*60). ' "," '. $data. ') '; $zen _session_db->query ($sql); }/* IF ($zen _session_db->affected_rows > 0) {return TRUE; } else {return FALSE; } */return TRUE;} function Zen_session_destroy ($SID) {global $zen _session_db; $sql = ' Delete from session where Session_id= '. $sid. ' "; $zen _session_db->query ($sql); $_session = Array (); return TRUE;} function zen_session_gc ($time) {global $zen _session_db; $sql = ' Delete from session where expire < '. Time (); $zen _session_db->query ($sql); return TRUE;} Session_set_save_handler (' Zen_session_open ', ' zen_session_close ', ' zen_session_read ', ' zen_session_write ', ' Zen_ ' Session_destroy ', ' zen_session_gc '); Session_name (' Zenid '); Session_Start (); $_session[' age ') = 16;$_session[' color '] = ' green '; Session_write_close ();
Do not know how, than to the reference book, but it is impossible to achieve in the database storage Ah, I copied the above code on another page, and then print the $_session array, but is empty, do not know where is the problem?
0) {ini_set (' Session.auto_start ', 1);} function Zen_session_open () {global $zen _session_db; $zen _session_db = new mysqli (' localhost ', ' root ', ' wh36524 ', ' phptest '); return TRUE;} function Zen_session_close () {global $zen _session_db; Return $zen _session_db, close ();} function Zen_session_read ($SID) {global $zen _session_db; $sql = ' Select Session_value from sessions where session_id= "'. $sid. '"; $query = $zen _session_db->query ($sql); if ($zen _session_db-errno) {die ($zen _session_db->error); } if ($query-num_rows = = 1) {$data = $query->fetch_assoc (); return $data [' Session_value ']; } else {return ""; }}function Zen_session_write ($sid, $data) {global $zen _session_db; $sql = ' SELECT count (*) from sessions where session_id= "'. $sid. '"; $query = $zen _session_db->query ($sql); if ($zen _session_db->errno) {die ($zen _session_db->error); } if ($query->num_rows &Gt 0) {$sql = ' update session set Session_value= '. $data. ', expire= '. ( Time () +60*60). ' Where session_id= '. $sid. ' "; $zen _session_db->query ($sql); } else {$sql = ' INSERT into session values ('. $sid. ' "," '. Time () +60*60). ' "," '. $data. ') '; $zen _session_db->query ($sql); }/* IF ($zen _session_db->affected_rows > 0) {return TRUE; } else {return FALSE; } */return TRUE;} function Zen_session_destroy ($SID) {global $zen _session_db; $sql = ' Delete from session where Session_id= '. $sid. ' "; $zen _session_db->query ($sql); $_session = Array (); return TRUE;} function zen_session_gc ($time) {global $zen _session_db; $sql = ' Delete from session where expire < '. Time (); $zen _session_db->query ($sql); return TRUE;} Session_set_save_handler (' Zen_session_open ', ' zen_session_close ', ' zen_session_read ', ' zen_session_write ', ' Zen_ ' Session_destroy ', ' zen_session_gc '); Session_name (' Zenid '); Session_Start ();//$_session[' age ') = 16;//$_session[' color '] = ' green ';p rint_r ($_session); Session_write_close ();
Reply content:
0) {ini_set (' Session.auto_start ', 0);} function Zen_session_open () {global $zen _session_db; $zen _session_db = new mysqli (' localhost ', ' root ', ' wh36524 ', ' phptest '); return TRUE;} function Zen_session_close () {global $zen _session_db; Return $zen _session_db, close ();} function Zen_session_read ($SID) {global $zen _session_db; $sql = ' Select Session_value from sessions where session_id= "'. $sid. '"; $query = $zen _session_db->query ($sql); if ($zen _session_db-errno) {die ($zen _session_db->error); } if ($query-num_rows = = 1) {$data = $query->fetch_assoc (); return $data [' Session_value ']; } else {return ""; }}function Zen_session_write ($sid, $data) {global $zen _session_db; $sql = ' SELECT count (*) from sessions where session_id= "'. $sid. '"; $query = $zen _session_db->query ($sql); if ($zen _session_db->errno) {die ($zen _session_db->error); } if ($query->num_rows &Gt 0) {$sql = ' update session set Session_value= '. $data. ', expire= '. ( Time () +60*60). ' Where session_id= '. $sid. ' "; $zen _session_db->query ($sql); } else {$sql = ' INSERT into session values ('. $sid. ' "," '. Time () +60*60). ' "," '. $data. ') '; $zen _session_db->query ($sql); }/* IF ($zen _session_db->affected_rows > 0) {return TRUE; } else {return FALSE; } */return TRUE;} function Zen_session_destroy ($SID) {global $zen _session_db; $sql = ' Delete from session where Session_id= '. $sid. ' "; $zen _session_db->query ($sql); $_session = Array (); return TRUE;} function zen_session_gc ($time) {global $zen _session_db; $sql = ' Delete from session where expire < '. Time (); $zen _session_db->query ($sql); return TRUE;} Session_set_save_handler (' Zen_session_open ', ' zen_session_close ', ' zen_session_read ', ' zen_session_write ', ' Zen_ ' Session_destroy ', ' zen_session_gc '); Session_name (' Zenid '); Session_Start (); $_session[' age ') = 16;$_session[' color '] = ' green '; Session_write_close ();
Do not know how, than to the reference book, but it is impossible to achieve in the database storage Ah, I copied the above code on another page, and then print the $_session array, but is empty, do not know where is the problem?
0) {ini_set (' Session.auto_start ', 1);} function Zen_session_open () {global $zen _session_db; $zen _session_db = new mysqli (' localhost ', ' root ', ' wh36524 ', ' phptest '); return TRUE;} function Zen_session_close () {global $zen _session_db; Return $zen _session_db, close ();} function Zen_session_read ($SID) {global $zen _session_db; $sql = ' Select Session_value from sessions where session_id= "'. $sid. '"; $query = $zen _session_db->query ($sql); if ($zen _session_db-errno) {die ($zen _session_db->error); } if ($query-num_rows = = 1) {$data = $query->fetch_assoc (); return $data [' Session_value ']; } else {return ""; }}function Zen_session_write ($sid, $data) {global $zen _session_db; $sql = ' SELECT count (*) from sessions where session_id= "'. $sid. '"; $query = $zen _session_db->query ($sql); if ($zen _session_db->errno) {die ($zen _session_db->error); } if ($query->num_rows &Gt 0) {$sql = ' update session set Session_value= '. $data. ', expire= '. ( Time () +60*60). ' Where session_id= '. $sid. ' "; $zen _session_db->query ($sql); } else {$sql = ' INSERT into session values ('. $sid. ' "," '. Time () +60*60). ' "," '. $data. ') '; $zen _session_db->query ($sql); }/* IF ($zen _session_db->affected_rows > 0) {return TRUE; } else {return FALSE; } */return TRUE;} function Zen_session_destroy ($SID) {global $zen _session_db; $sql = ' Delete from session where Session_id= '. $sid. ' "; $zen _session_db->query ($sql); $_session = Array (); return TRUE;} function zen_session_gc ($time) {global $zen _session_db; $sql = ' Delete from session where expire < '. Time (); $zen _session_db->query ($sql); return TRUE;} Session_set_save_handler (' Zen_session_open ', ' zen_session_close ', ' zen_session_read ', ' zen_session_write ', ' Zen_ ' Session_destroy ', ' zen_session_gc '); Session_name (' Zenid '); Session_Start ();//$_session[' age ') = 16;//$_session[' color '] = ' green ';p rint_r ($_session); Session_write_close ();
Asking questions should provide as many clues as possible, such as what your statement looks like SQL
, so that others are more convenient when testing, and now I need to create it myself:
sql
CREATE TABLE `session` ( `session_id` char(128) DEFAULT NULL, `expire` int(11) DEFAULT NULL, `session_value` text) ENGINE=MyISAM DEFAULT CHARSET=utf8
Environment information is provided as much as possible, such as my code can be run in PHP 5.5.16-pl0-gentoo
Question 1: You have a problem with the name of your table, you use it when you read it,sessions it, you write it with the session .
Question 2, seemingly through the open method of opening the database link in other places can not be used, (this reason I do not know, the latter to understand why), to the official look under, are used by the class to complete. So turn your back into the form of OOP test available.
0) {ini_set (' Session.auto_start ', 0);} Class Mysqlsessionhandler implements Sessionhandlerinterface{private $_db;public function close () {return $this->_d B->close ();} Public function Destroy ($sessionn _id) {$sql = ' delete from sessions where session_id= ' '. $session _id. ' "; $this->_db->query ($sql); $_session = Array (); return TRUE;} Public Function GC ($maxlifetime) {$sql = ' delete from sessions where expire < '. Time (); $zen _session_db->query ($sql); return TRUE;} Public function open ($save _path, $name) {$this->_db = new mysqli (' localhost ', ' root ', ' password ', ' test '); Return (Boolean) $this->_db;} Public function read ($session _id) {$sql = ' Select Session_value from sessions where session_id= ' '. $session _id. ' "; $query = $this->_db->query ($sql); if ($this->_db->errno) {die ($this->_db->error); } if ($query-num_rows = = 1) {$session _data = $query->fetch_assoc (); Return $session _data[' sEssion_value ']; } else {return ""; }}public function Write ($session _id, $session _data) {$sql = ' select count (*) as Count from sessions where session_id= "' . $session _id. ' "; $query = $this->_db->query ($sql); $result = $query->fetch_assoc (); if ($this->_db->errno) {die ($this->_db->error); if ($result [' Count '] > 0) {$sql = ' update sessions set session_value=\ '. $session _data. ' \ ', expire= '. (Time () +60*60). ' where session_id= "'. $session _id. ' "; $this->_db->query ($sql); } else {$sql = ' INSERT INTO sessions values ("'. $session _id. '", "'. Time () +60*60). ' ", \ '. $session _data. ' \')'; $this->_db->query ($sql); } if ($this->_db->affected_rows > 0) {return TRUE; } else {return FALSE; }}} $handler = new Mysqlsessionhandler;session_set_save_handler ($handler, True); Session_name (' Zenid '); session_start (); $_session[' age '] = 17;$_session[' color '] = ' GREEn '; $_session[' color2 ') = ' red ';