您的位置:首页 > 编程语言 > PHP开发

php把session写入数据库示例

2014-02-26 10:35 531 查看
<?phpclass 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));

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php session 数据库