php实现将Session写入数据库
发布:smiling 来源: PHP粉丝网 添加日期:2021-06-14 11:17:35 浏览: 评论:0
这篇文章主要介绍了php实现将Session写入数据库的相关资料,需要的朋友可以参考下,使用session_set_save_handler()函数,将Session的内容写入数据库。
- <?php
- /*
- *@author Fahy
- *数据库为mysql,
- *数据库名为session,表名为session,
- *表中字段包括PHPSESSID,update_time,client_ip,data
- */
- class Session{
- private static $handler = null;
- private static $ip = null;
- private static $lifetime = null;
- private static $time = null;
- //配置静态变量
- private static function init($handler){
- self::$handler = $handler; //获取数据库资源
- self::$ip = !emptyempty($_SERVER["REMOTE_ADDR"])? $_SERVER["REMOTE_ADDR"]:'unkonw'; //获取客户端ip
- self::$lifetime = ini_get('session.gc_maxlifetime'); //获取session生命周期
- self::$time = time(); //获取当前时间
- }
- //调用session_set_save_handler()函数并开启session
- static function start($pdo){
- self::init($pdo);
- session_set_save_handler(
- array(__CLASS__,'open'),
- array(__CLASS__,'close'),
- array(__CLASS__,'read'),
- array(__CLASS__,'write'),
- array(__CLASS__,'destroy'),
- array(__CLASS__,'gc')
- );
- session_start();
- }
- public static function open($path,$name){
- return true;
- }
- public static function close(){
- return true;
- }
- //查询数据库中的数据
- public static function read($PHPSESSID){
- $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?";
- $stmt = self::$handler->prepare($sql);
- $stmt->execute(array($PHPSESSID));
- if(!$result = $stmt->fetch(PDO::FETCH_ASSOC)){
- return '';
- }
- if(self::$ip == $result['client_ip']){
- self::destroy($PHPSESSID);
- return '';
- }
- if(($result['update_time']+self::$lifetime)<self::$time){
- self::destroy($PHPSESSID);
- return '';
- }
- return $result['data'];
- }
- /*
- *首先查询该session是否存在数据,如果存在,则更新数据,如果不存在,则插入数据
- */
- //将session写入数据库中,$data传入session中的keys和values数组
- public static function write($PHPSESSID,$data){
- $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?";
- $stmt = self::$handler->prepare($sql);
- $stmt->execute(array($PHPSESSID));
- if($result=$stmt->fetch(PDO::FETCH_ASSOC)){
- if($result['data'] != $data || self::$time > ($result['update_time']+30)){
- $sql = "update session set update_time=?,data=? where PHPSESSID = ?";
- $stmt = self::$handler->prepare($sql);
- $stmt->execute(array($self::$time,$data,$PHPSESSID));
- }
- }else{
- if(!emptyempty($data)){
- try{
- $sql = "insert into session(PHPSESSID,update_time,client_ip,data) values(?,?,?,?)";
- }catch(PDOException $e){
- echo $e->getMessage();
- }
- $sth = self::$handler->prepare($sql);
- $sth->execute(array($PHPSESSID,self::$time,self::$ip,$data));
- }
- }
- return true;
- }
- public static function destroy($PHPSESSID){
- $sql = "delete from session where PHPSESSID = ?";
- $stmt = self::$handler->prepare($sql);
- $stmt->execute(array($PHPSESSID));
- return true;
- }
- public static function gc($lifetime){
- $sql = "delete from session where update_time<?";
- $stmt = self::$handler->prepare($sql);
- $stmt->execute(array(self::$time-$lifetime));
- return true;
- }
- }
- //使用PDO连接数据库
- try{
- $pdo = new PDO("mysql:host=localhost;dbname=session","root","hwj193");
- }catch(PDOException $e){
- echo $e->getMessage();
- }
- //传递数据库资源
- Session::start($pdo);
以上所述就是本文的全部内容了,希望大家能够喜欢。
Tags: Session
相关文章
- ·session 的工作原理与session用法 (2013-11-12)
- ·PHP创建和使用session cookie变量(2013-11-13)
- ·session与cookie会话控制(2013-11-14)
- ·cookie和session 区别(2013-11-14)
- ·PHP 会话(session 时间设定)使用入门 (2013-11-14)
- ·关于使用session_start 出现的headers (2013-11-27)
- ·session Cannot send session cache limiter 错误提示(2013-11-28)
- ·session_start() [function.session-start]: Cannot send session cookie(2013-11-29)
- ·Warning: session_destroy() [function.session-destroy]: Trying to destroy(2013-11-29)
- ·php中session引起错误问题集锦(2013-11-30)
- ·php session永不过期的设置方法(2013-11-30)
- ·PHP中session共享和登录验证的实现方法(2013-12-02)
- ·php中session超时严格控制实例(2013-12-02)
- ·PHP中header和session_start前不能有输出的原因(2013-12-03)
- ·Deprecated: Function session_register() is deprecated(2013-12-04)
- ·Warning: session_start() [function.session-start](2013-12-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)