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+javascript模拟Matrix画面
Oct 09 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
php不用正则验证真假身份证
Nov 06 PHP
php删除数组元素示例分享
Feb 17 PHP
php设置页面超时时间解决方法
Sep 22 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
对比分析php中Cookie与Session的异同
Feb 19 PHP
thinkPHP多表查询及分页功能实现方法示例
Jul 03 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 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_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
Python中实现参数类型检查的简单方法
2015/04/21 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
python实现图像拼接功能
2020/03/23 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
党旗在我心中演讲稿
2014/09/15 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
党员转正介绍人意见
2015/06/03 职场文书
2019年大学推荐信
2019/06/24 职场文书
python利用while求100内的整数和方式
2021/11/07 Python
python lambda 表达式形式分析
2022/04/03 Python