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结合飞信 免费天气预报短信
May 07 PHP
php数据库密码的找回的步骤
Jan 12 PHP
php模板原理讲解
Nov 13 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
php实现递归与无限分类的方法
Feb 16 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 PHP
Laravel timestamps 设置为unix时间戳的方法
Oct 11 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 PHP
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
Apr 01 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中static关键字原理的学习研究分析
2011/07/18 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
用python爬取租房网站信息的代码
2018/12/14 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
Python龙贝格法求积分实例
2020/02/29 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
妇联主席先进事迹
2014/05/18 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
效能风暴心得体会
2014/09/04 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
开国大典观后感
2015/06/04 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python