class CustomSession{ private static $db_host="localhost"; private static $db_user="root"; private static $db_password=""; private static $database="session"; private $conn; public static function getInstance(){ static $instance=null; if($instance==null){ $instance=new CustomSession(); } return $instance; } public function __construct(){ session_set_save_handler( array($this,"open"), array($this,"close"), array($this,"read"), array($this,"write"), array($this,"destroy"), array($this,"gc") ); } public function __destruct(){ session_write_close(); } public function open(){ $this->conn=mysql_connect(CustomSession::$db_host,CustomSession::$db_user,CustomSession::$db_password); mysql_select_db(CustomSession::$database,$this->conn); } public function close(){ mysql_close($this->conn); } public function read($id){ $escaped_id=mysql_escape_string($id); $res=$this->query("select * from `session` where `sessionid`='$escaped_id'"); if($row=mysql_fetch_assoc($res)){ $this->query("update `session` set `timetamp`=UTC_TIMESTAMP() where `sessionid`='$escaped_id'"); return $row['data']; } return ""; } public function write($id,$data){ $query="replace into `session` (`sessionid`,`data`,`ip`,`timestamp`) values ('%s','%s','%s',UNIX_TIMESTAMP(UTC_TIMESTAMP()))"; $this->query(sprintf($query,mysql_escape_string($id),mysql_escape_string($data),$_SERVER["REMOTE_ADDR"]));//www.jquerycn.cn } public function destroy($id){ $escaped_id=mysql_escape_string($id); $res=$this->query("delete from `session` where `id`='$escaped_id'"); return (mysql_affected_rows($res)==1); } public function gc($lifetime){ $this->query("delete from `session` where UNIX_TIMESTAMP(UTC_TIMESTAMP())-`timestamp` > $lifetime"); } public function query($query){ $res=mysql_query($query,$this->conn); return $res; } } ?> 3.测试程序
代码如下 | 复制代码 | include('./CustomSession.class.php'); CustomSession::getInstance(); session_start(); $_SESSION['username']='feng'; print_r($_SESSION); ?> 运行测试程序后,查看数据库可以发现session表中已经增加了session记录 |
|