Home  >  Article  >  php教程  >  php session 写入数据库

php session 写入数据库

WBOY
WBOYOriginal
2016-06-06 19:33:041010browse

?php $config = array( host= 127.0.0.1, user= root, password= 123456, database= test, charset= utf8, table= user_session); session_handler::init($config); session::open(); session::set(profile, array(id= 1, user= haowei, vip-level=6)); 无 源


$config = array(
"host"=> "127.0.0.1",
"user"=> "root",
"password"=> "123456",
"database"=> "test",
"charset"=> "utf8",
"table"=> "user_session");

session_handler::init($config);
session::open();
session::set("profile", array("id"=> 1, "user"=> "haowei", "vip-level"=> 6));

源码与演示:源码出处 演示出处

<?php

#
#	codeMaker Alpha 0.1.1 ( haowei.me )
#	This framework comply with the GPL license agreement
#

class session_handler {
	
	protected $maxlifetime = null;
	protected $dbHandle = null;
	public $config = null;
	
	public static function init($args) {
		return new self($args);
	}
	
	public function __construct($args) {
		
		$this->config = $args;
		$this->maxlifetime = get_cfg_var("session.gc_maxlifetime");
		session_set_save_handler(
		array($this, "open"),
		array($this, "close"),
		array($this, "read"),
		array($this, "write"),
		array($this, "destroy"),
		array($this, "gc"));
		
	}
	
	public function open() {
		$this->link = mysqli_connect(
		$this->config['host'], 
		$this->config['user'], 
		$this->config['password'], 
		$this->config['database']);
		mysqli_set_charset($this->link, "utf8");
		$sql = 'CREATE TABLE IF NOT EXISTS `%s` (
		`session_id` varchar(255) NOT NULL,
		`session_data` text,
		`session_expires` char(10) NOT NULL,
		PRIMARY KEY (`session_id`)
		) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;';
		$sql = sprintf($sql, $this->config['table']);
		mysqli_query($this->link, $sql);
		return true;
	}
	
	public function close() {
		return true;
	}
	
	
	public function read($session_id) {
		if(empty($session_id)) return null;
		
		$sql = 'SELECT `session_data` AS `data` FROM `%s` WHERE `session_id` = "%s" AND `session_expires` > "%u"';
		$sql = sprintf($sql, 
		mysqli_real_escape_string($this->link, $this->config['table']), 
		mysqli_real_escape_string($this->link, $session_id),
		time());
		
		$result = mysqli_query($this->link, $sql);
		$row = mysqli_fetch_assoc($result);
		return $row['data'];
		
	}
	
	public function write($session_id, $session_data) {
		if(empty($session_id)) return null;
		
		$newExpires = time() + $this->maxlifetime;
		$sql = 'REPLACE INTO `%s` SET `session_id` = "%s", `session_data` = "%s", `session_expires` = "%u"';
		$sql = sprintf($sql, 
		mysqli_real_escape_string($this->link, $this->config['table']), 
		mysqli_real_escape_string($this->link, $session_id),
		mysqli_real_escape_string($this->link, $session_data),
		$newExpires);
		
		$result = mysqli_query($this->link, $sql);
		return mysqli_affected_rows($this->link);
		
    }
	
	public function destroy($session_id) {
		$sql = 'DELETE FROM `%s` WHERE `session_id` = "%s"';
		$sql = sprintf($sql, 
		mysqli_real_escape_string($this->link, $this->config['table']), 
		mysqli_real_escape_string($this->link, $session_id));

		$result = mysqli_query($this->link, $sql);
		return mysqli_affected_rows($this->link);
    }
	
	public function gc() {
		$sql = 'DELETE FROM `%s` WHERE `session_expires` < "%u"';
		$sql = sprintf($sql, 
		mysqli_real_escape_string($this->link, $this->config['table']), 
		time());
		
		$result = mysqli_query($this->link, $sql);
		return mysqli_affected_rows($this->link);
    }
	
}

class session {

	public static $collection = null;
	
	public static function open($clean = false, $token = false) {
		if($clean) ob_end_clean();
		if($token) session_id($token);
		session_start();
		self::$collection = $_SESSION;
	}
	
	public static function id() {
		$num_args = func_num_args();
		if($num_args) {
			$args = func_get_arg(0);
			return session_id($args);
		}else{
			return session_id();
		}
	}
	
	public static function get($name) {
		return isset($_SESSION[$name]) ? $_SESSION[$name] : null;
	}
	
	public static function set($name, $value) {
		$_SESSION[$name] = $value;
		return true;
	}
	
	public static function delete($name) {
		if(!isset($_SESSION[$name])) return null;
		unset($_SESSION[$name]);
		return true;
	}
	
	public static function destroy() {
		session_destroy();
	}
	
}



$config = array(
"host"=> "127.0.0.1",
"user"=> "root",
"password"=> "123456",
"database"=> "test",
"charset"=> "utf8",
"table"=> "user_session");

session_handler::init($config);
session::open();
session::set("profile", array("id"=> 1, "user"=> "haowei", "vip-level"=> 6));
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn