使用session_set_save_handler()函数,将Session的内容写入数据库

  1 <?php
  2     /*
  3     *@author    Fahy
  4     *@link    http://home.cnblogs.com/u/HuangWj
  5     *数据库为mysql,
  6     *数据库名为session,表名为session,
  7     *表中字段包括PHPSESSID,update_time,client_ip,data
  8     */
  9     class Session{
 10         private static $handler = null;
 11         private static $ip = null;
 12         private static $lifetime = null;
 13         private static $time = null;
 14
 15         //配置静态变量
 16         private static function init($handler){
 17             self::$handler = $handler;        //获取数据库资源
 18             self::$ip = !empty($_SERVER["REMOTE_ADDR"])? $_SERVER["REMOTE_ADDR"]:'unkonw';        //获取客户端ip
 19             self::$lifetime = ini_get('session.gc_maxlifetime');        //获取session生命周期
 20             self::$time = time();        //获取当前时间
 21         }
 22         //调用session_set_save_handler()函数并开启session
 23         static function start($pdo){
 24             self::init($pdo);
 25             session_set_save_handler(
 26                 array(__CLASS__,'open'),
 27                 array(__CLASS__,'close'),
 28                 array(__CLASS__,'read'),
 29                 array(__CLASS__,'write'),
 30                 array(__CLASS__,'destroy'),
 31                 array(__CLASS__,'gc')
 32             );
 33             session_start();
 34         }
 35
 36         public static function open($path,$name){
 37             return true;
 38         }
 39         public static function close(){
 40             return true;
 41         }
 42
 43         //查询数据库中的数据
 44         public static function read($PHPSESSID){
 45              $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?";
 46              $stmt = self::$handler->prepare($sql);
 47              $stmt->execute(array($PHPSESSID));
 48              if(!$result = $stmt->fetch(PDO::FETCH_ASSOC)){
 49                  return '';
 50              }
 51              if(self::$ip == $result['client_ip']){
 52                  self::destroy($PHPSESSID);
 53                  return '';
 54              }
 55              if(($result['update_time']+self::$lifetime)<self::$time){
 56                  self::destroy($PHPSESSID);
 57                  return '';
 58              }
 59              return $result['data'];
 60         }
 61         /*
 62          *首先查询该session是否存在数据,如果存在,则更新数据,如果不存在,则插入数据
 63          */
 64         //将session写入数据库中,$data传入session中的keys和values数组
 65         public static function write($PHPSESSID,$data){
 66             $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?";
 67              $stmt = self::$handler->prepare($sql);
 68              $stmt->execute(array($PHPSESSID));
 69
 70              if($result=$stmt->fetch(PDO::FETCH_ASSOC)){
 71                  if($result['data'] != $data || self::$time > ($result['update_time']+30)){
 72                      $sql = "update session set update_time=?,data=? where PHPSESSID = ?";
 73                      $stmt = self::$handler->prepare($sql);
 74                      $stmt->execute(array($self::$time,$data,$PHPSESSID));
 75                 }
 76              }else{
 77                  if(!empty($data)){
 78                      try{
 79                          $sql = "insert into session(PHPSESSID,update_time,client_ip,data) values(?,?,?,?)";
 80                      }catch(PDOException $e){
 81                          echo $e->getMessage();
 82                      }
 83                      $sth = self::$handler->prepare($sql);
 84                      $sth->execute(array($PHPSESSID,self::$time,self::$ip,$data));
 85                  }
 86              }
 87              return true;
 88         }
 89
 90         public static function destroy($PHPSESSID){
 91             $sql = "delete from session where PHPSESSID = ?";
 92             $stmt = self::$handler->prepare($sql);
 93             $stmt->execute(array($PHPSESSID));
 94             return true;
 95         }
 96         public static function gc($lifetime){
 97             $sql = "delete from session where update_time<?";
 98             $stmt = self::$handler->prepare($sql);
 99             $stmt->execute(array(self::$time-$lifetime));
100             return true;
101         }
102     }
103     //使用PDO连接数据库
104     try{
105         $pdo = new PDO("mysql:host=localhost;dbname=session","root","hwj193");
106     }catch(PDOException $e){
107         echo $e->getMessage();
108     }
109     //传递数据库资源
110     Session::start($pdo);

转载于:https://www.cnblogs.com/HuangWj/p/4401115.html

将Session写入数据库相关推荐

  1. php session写入数据库_php session 写入数据库,phpsession

    php session 写入数据库,phpsession 本文实例介绍了php session 写入数据库的方法,分享给大家供大家参考,具体内容如下 config = $args; $this-> ...

  2. php如何将mysql数据库中的admin字段赋值给session_php实现将Session写入数据库

    /* *@author Fahy *数据库为mysql, *数据库名为session,表名为session, *表中字段包括PHPSESSID,update_time,client_ip,data * ...

  3. PHP 自定义session储存 数据库 方式类   高洛峰 细说PHP

    自定义session储存 数据库 方式类 在php.ini配置文件中更改设置 (Registered_save_handlers 有三种方式 files user memcache) session. ...

  4. Log4j写入数据库详解

    log4j是一个优秀的开源日志记录项目,我们不仅可以对输出的日志的格式自定义,还可以自己定义日志输出的目的地,比如:屏幕,文本文件,数据库,甚至能通过socket输出.本节主要讲述如何将日志信息输入到 ...

  5. java 二进制图片上传_Spring MVC上传图片,Java二进制图片写入数据库,生成略缩图...

    背景描述:最近做到一个项目,有个商品登记功能.登记的信息包括:基本信息若干(文字信息):图片信息,要求将图片保存到数据表中的image字段(sql server 数据库) 步骤:1.将图片上传到服务器 ...

  6. java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...

    文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术 如题:文件信息的批量导入-- 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中 ...

  7. php之将用户信息写入数据库

    session高级应用将用户信息写入到数据库中 首先建立数据库表 在实验数据库sqldb中建立session表,用于存储数据 在根文件夹下建立须要用到的文件(重点是session,class.php这 ...

  8. php mysql交互实例_php基于session实现数据库交互的类实例

    /** * session 数据库存储类 */ class Session { private static $session_id = 0; private static $session_data ...

  9. php session 自定义到数据库,PHP 自定义session储存 数据库 方式类   高洛峰 细说PHP...

    自定义session储存 数据库 方式类 在php.ini配置文件中更改设置 (Registered_save_handlers 有三种方式 files user memcache) session. ...

  10. c#上传文件并将word pdf转化成txt存储并将内容写入数据库

    c#上传文件并将word pdf转化成txt存储并将内容写入数据库 c#上传文件并将word pdf转化成txt存储并将内容写入数据库 using System; using System.Data; ...

最新文章

  1. Jetson TX2 开机测试及刷机
  2. android的log.d不显示结果
  3. Zookeeper的安装部署,zookeeper参数配置说明,集群搭建,查看集群状态
  4. python程序结构有哪几种_Python数据结构与算法(几种排序)小结
  5. 转:asp.net 负载平衡-Session相关
  6. 如何用c#打开文件夹并选择文件夹内的一个文件 open folder and select file
  7. C语言课后习题(20)
  8. 【干货】Python参考书籍
  9. php生成excel完整实例代码,PHP输出Excel实例代码
  10. 2019 双十一京东全民养红包攻略分享
  11. asp.net session对象
  12. Python全栈自动化测试--Pycharm专业版安装
  13. oracle中分号和双引号用法,深入理解oracle中单引号与双引号的用法区别
  14. Flatty Shadow图标自动产生器——在线生成各种扁平化 ICON
  15. 如何去爱一个人[转]
  16. 石墨烯和碳纤维的联系与区别
  17. unity中使用手柄控制角色移动
  18. iOS 真机测试错误解决An App ID with Identifier ...is not available
  19. TCP/IP协议族 总结
  20. 疫情过后,35岁老程序员年后第一天上班被公司劝退,该何去何从?

热门文章

  1. 读取wav文件中的音频数据操作
  2. Luogu4711「物理」平抛运动
  3. BZOJ2115 [WC2011]最大XOR和路径
  4. vue2项目中全局引入scss变量
  5. element-UI-tab选项卡
  6. 黑马vue实战项目-(二)用户列表开发
  7. could not connect to smtp host java_服务器发送邮件出现Could not connect to SMTP host错误 解决办法...
  8. python实现洗牌算法_【Python】洗牌算法及 random 中 shuffle 方法和 sample 方法浅析...
  9. window docker 查看镜像仓库_10.Docker容器镜像Registry仓库安全构建与GC回收
  10. 微信小程序wxml如何判断字符串中汉语某字符_如何获取别人微信小程序的源文件?...