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下几种删除目录的方法总结
Aug 19 PHP
在PHP中使用模板的方法
May 24 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
在项目中寻找代码的坏命名
Jul 14 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
php发送post请求的三种方法
Feb 11 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
Yii中表单用法实例详解
Jan 05 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的一些小问题
2010/07/03 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
浅谈php自定义错误日志
2015/02/13 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
PHP文件与目录操作示例
2016/12/24 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
生成二维码方法汇总
2014/12/26 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Python中正则表达式详解
2017/05/17 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
初三政治教学反思
2014/01/30 职场文书
学校标语大全
2014/06/19 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
获奖感言范文
2015/07/31 职场文书
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers