• 技术文章 >php教程 >php手册

    PHP session信息存储到数据库的类

    2016-06-06 19:31:41原创278

    求建议! SessionHandlerInterface接口是PHP内置的接口,直接实现就行了 具体可以看php手册关于session_set_save_handler函数的解释! PHP /*** session信息存储到数据库的类* 表结构:* CREATE TABLE IF NOT EXISTS `sessioninfo` (* `sid` varchar(255) NOT

    求建议!
    SessionHandlerInterface接口是PHP内置的接口,直接实现就行了
    具体可以看php手册关于session_set_save_handler函数的解释! PHP
    /**
    * session信息存储到数据库的类
    * 表结构:
    * CREATE TABLE IF NOT EXISTS `sessioninfo` (
    *  `sid` varchar(255) NOT NULL,
    *  `value` text NOT NULL,
    *  `expiration` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    *  PRIMARY KEY (`sid`)
    * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    */
    class MySessionHandler implements SessionHandlerInterface {
    
    	/**
    	* @access private
    	* @var object 数据库连接
    	*/
    	private $_dbLink;
    	/**
    	* @access private
    	* @var string 保存session的表名
    	*/
    	Private $_sessionTable;
    	/**
    	* @access private
    	* @var string session名
    	*/
    	private $_sessionName;
    	/**
    	* @const 过期时间
    	*/
    	const SESSION_EXPIRE = 10;
    
    	public function __construct($dbLink, $sessionTable) {
    		if(!is_object($dbLink)) {
    			return false;
    		}
    		$this->_dbLink = $dbLink;
    		$this->_sessionTable = $sessionTable;
    	}
    
    	/**
    	* 打开
    	* @access public
    	* @param string $session_save_path 保存session的路径
    	* @param string $session_name session名
    	* @return integer
    	*/
    	public function open($session_save_path, $session_name) {
    		$this->_sessionName = $session_name;
    		return 0;
    	}
    
    	/**
    	* 关闭
    	* @access public
    	* @return integer
    	*/
    	public function close() {
    		return 0;
    	}
    
    	/**
    	* 关闭session
    	* @access public
    	* @param string $session_id session ID
    	* @return string
    	*/
    	public function read($session_id) {
    		$query = "SELECT value FROM {$this->_sessionTable} WHERE sid = {$session_id} AND UNIX_TIMESTAMP(expiration) + " . self::SESSION_EXPIRE . " > UNIX_TIMESTAMP(NOW())";
    		$result = $this->_dbLink->query($query);
    		if(!isset($value) || empty($value)) {
    			$value = "";
    			return $value;
    		}
    		$this->_dbLink->query("UPDATE {$this->_sessionTable} SET expiration = CURRENT_TIMESTAMP() WHERE sid = {$session_id}");
    		$value = $result->fetch_array();
    		$result->free();
    		return $value['value'];
    	}
    
    	/**
    	* 写入session
    	* @access public
    	* @param string $session_id session ID
    	* @param string $session_data session data
    	* @return integer
    	*/
    	public function write($session_id, $session_data) {
    		$query = "SELECT value FROM {$this->_sessionTable} WHERE sid = '{$session_id}' AND UNIX_TIMESTAMP(expiration) + " . self::SESSION_EXPIRE . " > UNIX_TIMESTAMP(NOW())";
    		$result = $this->_dbLink->query($query);
    		$result = $result->fetch_array();
    		if(!empty($result)) {
    			$result = $this->_dbLink->query("UPDATE {$this->_sessionTable} SET value = {$session_data} WHERE sid = {$session_id}");
    		}
    		else{
    			$result = $this->_dbLink->query("INSERT INTO {$this->_sessionTable} (sid, value) VALUES ('{$session_id}', '{$session_data}')");
    		}
    		if($result){
    			return 0;
    		}
    		else{
    			return 1;
    		}		
    	}
    
    	/**
    	* 销魂session
    	* @access public
    	* @param string $session_id session ID
    	* @return integer
    	*/
    	public function destroy($session_id) {
    		$result = $this->_dbLink->query("DELETE FROM {$this->_sessionTable} WHERE sid = '{$session_id}'");
    		if($result){
    			return 0;
    		}
    		else{
    			return 1;
    		}
    	}
    
    	/**
    	* 垃圾回收
    	* @access public
    	* @param string $maxlifetime session 最长生存时间
    	* @return integer
    	*/
    	public function gc($maxlifetime) {
    		$result = $this->_dbLink->query("DELETE FROM {$this->_sessionTable} WHERE UNIX_TIMESTAMP(expiration) < UNIX_TIMESTAMP(NOW()) - " . self::SESSION_EXPIRE);
    		if($result){
    			return 0;
    		}
    		else{
    			return 1;
    		}
    	}
    
    }
    
    
    
    /**********************************************************************************************************************************/
    
    $dbLink = new mysqli("localhost", "root", "root", "test");
    $sessionTable = "sessioninfo";
    
    $handler = new MySessionHandler($dbLink, $sessionTable);
    session_set_save_handler($handler);
    session_start();
    $_SESSION['name'] = "test";
    echo $_SESSION["name"];
    //session_destroy();
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php 将html 转成wml WAP标记语言 下一篇:无限级菜单父节点查询所有子节点
    PHP编程就业班

    相关文章推荐

    • php页面跳转的几种实现方法• 第一节--面向对象编程--ClassesandObjectsinPHP51• ajax无刷新分页,支持id定位• Memcache 中实现消息队列• php 把会员数据导入到ucenter代码

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网