php把session写入数据库示例


Posted in PHP onFebruary 26, 2014
<?php
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));
PHP 相关文章推荐
PHP 的 __FILE__ 常量
Jan 15 PHP
pw的一个放后门的方法分析
Oct 08 PHP
php下mysql数据库操作类(改自discuz)
Jul 03 PHP
php 目录与文件处理-郑阿奇(续)
Jul 04 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
php实现文章置顶功能的方法
Oct 20 PHP
PHP中cookie知识点学习
May 06 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
PHP chr()函数讲解
Feb 11 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 PHP
php操作mysql数据库的基本类代码
Feb 25 #PHP
php获取bing每日壁纸示例分享
Feb 25 #PHP
php异常处理使用示例
Feb 25 #PHP
php反射应用示例
Feb 25 #PHP
php数组去重复数据示例
Feb 25 #PHP
php分页函数示例代码分享
Feb 24 #PHP
php对数组排序代码分享
Feb 24 #PHP
You might like
PHP实现文件安全下载
2006/10/09 PHP
php横向重复区域显示二法
2008/09/25 PHP
ajax php 实现写入数据库
2009/09/02 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
一句话工作感言
2014/03/01 职场文书
大家访活动实施方案
2014/03/10 职场文书
一岗双责责任书
2014/04/15 职场文书
环保标语大全
2014/06/12 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
结婚老公保证书
2015/02/26 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
个人维稳承诺书
2015/05/04 职场文书
2015年女职工工作总结
2015/05/15 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书