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的FTP学习(一)[转自奥索]
Oct 09 PHP
学习使用curl采集curl使用方法
Jan 11 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
php获取根域名方法汇总
Oct 28 PHP
PHP解析RSS的方法
Mar 05 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
php生出随机字符串
Jul 06 PHP
利用php操作memcache缓存的基础方法示例
Aug 02 PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 PHP
php7中停止php-fpm服务的方法详解
May 09 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
德生9700DX电路分析
2021/03/02 无线电
example2.php
2006/10/09 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
php的ddos攻击解决方法
2015/01/08 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
解密效果
2006/06/23 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
详解Python中的循环语句的用法
2015/04/09 Python
Python星号*与**用法分析
2018/02/02 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
python使用Tesseract库识别验证
2018/03/21 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
Python中按键来获取指定的值
2019/03/02 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
八一演出活动方案
2014/02/03 职场文书
个人自荐材料
2014/05/23 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
贷款担保书
2015/01/20 职场文书
综合管理员岗位职责
2015/02/11 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
详解TypeScript的基础类型
2022/02/18 Javascript
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python