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的控制语句
Oct 09 PHP
php 小乘法表实现代码
Jul 16 PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 PHP
php生成图形(Libchart)实例
Nov 06 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
修改WordPress中文章编辑器的样式的方法详解
Dec 15 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
php实现的生成排列算法示例
Jul 25 PHP
laravel框架语言包拓展实现方法分析
Nov 22 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
控制打印时页眉角的代码
2007/02/08 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python sep参数使用方法详解
2020/02/12 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
python实现银行账户系统
2021/02/22 Python
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
医院门卫岗位职责
2013/12/30 职场文书
拖鞋店创业计划书
2014/01/15 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
整改通知书格式
2015/04/22 职场文书
红色故事汇观后感
2015/06/18 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
php png失真的原因及解决办法
2021/11/17 PHP