自定义session储存 数据库 方式类

在php.ini配置文件中更改设置 (Registered_save_handlers 有三种方式 files user memcache)

session.save_handler = user 表示用户自定义session类<?php

/*

* 自定义session储存数据库方式的类

*

*/

class DBSession{

public  static  $pdo;                     //pdo的对象

public  static $ctime;                   //当前时间

public  static $maxlifetime;         //最大生存时间

public  static $uip;                      //用户正在用的ip

public  static $uagent;               //用户正在使用的浏览器

public static function start(PDO $pdo){//限制变量是PDO类

self::$pdo               =   $pdo;

self::$ctime            =   time();

self::$maxlifetime =    ini_get('session.gc_maxlifetime');

//设置不同版本的浏览器获取ip方式

self::$uip                =  !empty($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] :

(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR']:

(!empty($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:" "));

self::$uagent         =   !empty($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:' ';

//判断ip是否合法

// filter_var(self::$uip,FILTER_VALIDATE_IP)  && self::$uip = ' ';

//注册自定义函数

session_set_save_handler(

array(__CLASS__,'open'),

array(__CLASS__,'close'),

array(__CLASS__,'read'),

array(__CLASS__,'write'),

array(__CLASS__,'destroy'),

array(__CLASS__, 'gc'));

//开启会话

session_start();

}

//开始 sesssion_start()

public static function  open($path,$name){

echo 'open
';

return true;

}

//关闭

public static function close(){

echo 'close
';

return true;

}

//读取 echo

public static function read($sid){

echo 'read
';

$query = "select * from session where sid = ?";

$stmt   = self::$pdo->prepare($query);

$stmt->execute(array($sid));

$result = $stmt->fetch(PDO::FETCH_ASSOC);

//还没有会话信息,返回空字符串

if(!$result){

return ' ';

}

//如果超出时间,销毁session

if($result['utime']+self::$maxlifetime

self::destroy($sid);

return ' ';

}

//如果用户换了IP或换了浏览器

if($result['uip']!=self::$uip || $result['uagent'] != self::$uagent){

self::destroy($sid);

return ' ';

}

return $result['sdata'];

}

//写入 $_SESSION['username']='yang'

public static function write($sid,$data){

echo 'write
';

$query = "select * from session where sid =? ";

$stmt   = self::$pdo->prepare($query);

$stmt->execute(array($sid));

$result = $stmt->fetch(PDO::FETCH_ASSOC);

//若有数据,则更新

if($result){

//如果数据和原来的不一样 或者 当前时间大于文件修改时间加30秒的时候 才更新

if($result['sdata']!=$data || $result['utime']+30

$query = "update session set sdata = ?, utime = ? where sid =? ";

$stmt   = self::$pdo->prepare($query);

$stmt->execute(array($data,self::$ctime,$sid));

}

}else{//插入数据

if(!empty($data)){

$query = "insert into session(sid,sdata,utime,uip,uagent) values(?,?,?,?,?)";

$stmt   = self::$pdo->prepare($query);

$stmt  -> execute(array($sid,$data,self::$ctime,self::$uip,self::$uagent));

}

}

}

//销毁 session_destroy

public static function destroy($sid){

echo 'destroy
';

$query = "delete from session where sid = ?";

$stmt   = self::$pdo->prepare($query);

return $stmt  -> execute(array($sid));

}

//回收垃圾

public static function gc($maxlifetime){

echo 'gc
';

$query = "delete from session where utime

$stmt   = self::$pdo->prepare($query);

return $stmt  -> execute(array(self::$ctime-self::$maxlifetime));

}

}

DBSession::start($pdo);

创建session表create table session(

sid char(32) not null default ' ',

utime int not null default 0,

sdata text,

uip char(15) not null default ' ',

uagent varchar(200) not null default ' ',

index session_sid(sid)

);

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

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

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

  2. PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP

    smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title} 利用正则表达式找到并替换成 ...

  3. php 高洛峰 正则,PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP

    smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title}利用正则表达式找到并替换成 ...

  4. php memcache内存大小,PHP memcache 内存缓存 数据库查询 应用 高洛峰 细说PHP

    PHP memcache 内存缓存 数据库查询 应用 高洛峰 细说PHP 发布时间:2020-06-22 18:23:10 来源:51CTO 阅读:232 作者:津沙港湾 栏目:数据库 PHP mem ...

  5. php memcache 封装类,PHP 自定义session储存 MEMCACHE 方式类

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

  6. springboot整合shiro和session的详细过程和自定义登录拦截器

    文章目录 1.shiro依赖 2.shiro配置 shiro过滤器配置: 关联自定义的其他管理器 自定义会话工厂: 3.登陆时记录用户信息 4.shiro一些工具类的学习 5.自定义登录拦截器 shi ...

  7. spring boot设置session超时时长(自定义spring boot session超时时长)

    针对spring boot 2.0 以下版本(亲测1.5.10)设置session超时的方法如下: 1.添加依赖,代码如下: <dependency><groupId>org. ...

  8. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  9. mysql session 数_查询数据库当前连接数(session),进程数等操作

    查询当前数据库连接数,进程数,启动数据库 查询数据库当前进程的连接数: select count(*) from v$process; 查看数据库当前会话的连接数: elect count(*) fr ...

最新文章

  1. SQL 2014 in-memory中的storage部分
  2. bat 删除文件_利用电脑文本文档建立一个简单方便的删除文件的小程序
  3. ABAP动态取得数据的方法
  4. Centos8 cmake运行失败 undefined symbol archive_write_add_filter_zstd
  5. Python机器学习:评价分类结果003实现混淆矩阵,精准率和召回率
  6. 《Django实战系列》
  7. wordpress functions.php 在哪,实用WordPress functions.php代码收藏 – 来自WordPress Answers
  8. 显著性目标检测matlab代码_YOLO v3 目标检测终篇(附完整 GitHub 代码)
  9. 象棋人机对弈程序的思想
  10. win10系统安装+激活+去水印
  11. 维基百科中文语料库训练word2vec模型和使用总结
  12. 生成Xcode中各个尺寸的Mac App Icon
  13. Get_Web_banner(批量获取网站banner)
  14. 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问
  15. PJzhang:漏洞渗透测试框架“天使之剑(AngelSword)”
  16. spring获取Bean报错
  17. 稀疏近似最近点(SANP)
  18. Vue官方文档梳理-全局API
  19. 肺结节目标检测_体检单上的肺结节多半不是癌,千万别再自己吓自己
  20. 律师百度百科词条创建怎么做?怎么创建律师百科词条?

热门文章

  1. logging模块详细使用
  2. 电脑的锁屏密码忘记了怎么办?
  3. 坚持终身学习的重要性:只靠已有知识,你走不了多远
  4. 江北机场停车费多少钱一天,重庆江北机场附近停车场哪里最便宜
  5. 适合年轻人的副业项目,想要赚钱养家就不要再懒了
  6. 苹果发布会2014发布会简单总结
  7. VueJs探索之watch用法详解
  8. javaSE (十六)Randon、System类的方法(生成随机数、主动垃圾回收、终止jvm、对程序进行记时、System自带的复制数组的方法)
  9. 工业计算机英语作文,工业计算机,Industrial Computer,音标,读音,翻译,英文例句,英语词典...
  10. Java语言格式化返回日期为北京时间(东八区)