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 相关文章推荐
操作Oracle的php类
Oct 09 PHP
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
php缓存技术介绍
Nov 25 PHP
php 字符过滤类,用于过滤各类用户输入的数据
May 27 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
php实现单链表的实例代码
Mar 22 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
php实现用户注册密码的crypt加密
Jun 08 PHP
thinkPHP框架中执行事务的方法示例
May 31 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
PHP版 汉字转码的实现详解
2013/06/09 PHP
php发送post请求函数分享
2014/03/06 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
php微信开发之谷歌测距
2018/06/14 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
loading动画特效小结
2017/01/22 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
Python enumerate遍历数组示例应用
2008/09/06 Python
详解Python发送邮件实例
2016/01/10 Python
基于Python的关键字监控及告警
2017/07/06 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
Python压缩模块zipfile实现原理及用法解析
2020/08/14 Python
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
会计应届生的自荐信
2013/12/13 职场文书
商家认证委托书格式
2014/10/16 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
初二物理教学反思
2016/02/19 职场文书
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python