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)
Sep 04 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
php学习之function的用法
Jul 14 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
PHP中SESSION过期设置
Mar 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
一段php加密解密的代码
2006/10/09 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
python的几种开发工具介绍
2007/03/07 Python
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
如何基于Python批量下载音乐
2019/11/11 Python
python isinstance函数用法详解
2020/02/13 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
Python实现京东抢秒杀功能
2021/01/25 Python
python模块内置属性概念及实例
2021/02/18 Python
幼儿教师思想汇报
2014/01/10 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
校园文明倡议书
2014/05/16 职场文书
优秀班主任申报材料
2014/12/16 职场文书
端午节活动总结报告
2015/02/11 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
导游词之凤凰古城
2019/10/22 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
MySQL数据库事务的四大特性
2022/04/20 MySQL