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 相关文章推荐
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
Oct 13 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
PHP遍历数组的三种方法及效率对比分析
Feb 12 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
PHP获取二维数组中某一列的值集合
Dec 25 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
Dec 10 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
PHP实现活动人选抽奖功能
Apr 19 PHP
Laravel实现autoload方法详解
May 07 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 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 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
js 利用className得到对象的实现代码
2011/11/15 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
如何使用repr调试python程序
2020/02/28 Python
Python退出时强制运行一段代码的实现方法
2020/04/29 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
幼儿园庆六一游园活动方案
2014/01/29 职场文书
教育技术职业规划范文
2014/03/04 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
数学教师求职信范文
2015/03/20 职场文书
项目备案申请报告
2015/05/15 职场文书
一般纳税人申请报告
2015/05/18 职场文书
暑期家教宣传单
2015/07/14 职场文书
Python实现byte转integer
2021/06/03 Python