php session 自定义到数据库,PHP 自定义session储存 数据库 方式类 高洛峰 细说PHP...
自定义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...相关推荐
- PHP 自定义session储存 数据库 方式类 高洛峰 细说PHP
自定义session储存 数据库 方式类 在php.ini配置文件中更改设置 (Registered_save_handlers 有三种方式 files user memcache) session. ...
- PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP
smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title} 利用正则表达式找到并替换成 ...
- php 高洛峰 正则,PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP
smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title}利用正则表达式找到并替换成 ...
- php memcache内存大小,PHP memcache 内存缓存 数据库查询 应用 高洛峰 细说PHP
PHP memcache 内存缓存 数据库查询 应用 高洛峰 细说PHP 发布时间:2020-06-22 18:23:10 来源:51CTO 阅读:232 作者:津沙港湾 栏目:数据库 PHP mem ...
- php memcache 封装类,PHP 自定义session储存 MEMCACHE 方式类
自定义session储存 MEMCACHE 方式类 在php.ini配置文件中更改设置 (Registered_save_handlers 有三种方式 files user memcache) ses ...
- springboot整合shiro和session的详细过程和自定义登录拦截器
文章目录 1.shiro依赖 2.shiro配置 shiro过滤器配置: 关联自定义的其他管理器 自定义会话工厂: 3.登陆时记录用户信息 4.shiro一些工具类的学习 5.自定义登录拦截器 shi ...
- spring boot设置session超时时长(自定义spring boot session超时时长)
针对spring boot 2.0 以下版本(亲测1.5.10)设置session超时的方法如下: 1.添加依赖,代码如下: <dependency><groupId>org. ...
- 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法
数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...
- mysql session 数_查询数据库当前连接数(session),进程数等操作
查询当前数据库连接数,进程数,启动数据库 查询数据库当前进程的连接数: select count(*) from v$process; 查看数据库当前会话的连接数: elect count(*) fr ...
最新文章
- SQL 2014 in-memory中的storage部分
- bat 删除文件_利用电脑文本文档建立一个简单方便的删除文件的小程序
- ABAP动态取得数据的方法
- Centos8 cmake运行失败 undefined symbol archive_write_add_filter_zstd
- Python机器学习:评价分类结果003实现混淆矩阵,精准率和召回率
- 《Django实战系列》
- wordpress functions.php 在哪,实用WordPress functions.php代码收藏 – 来自WordPress Answers
- 显著性目标检测matlab代码_YOLO v3 目标检测终篇(附完整 GitHub 代码)
- 象棋人机对弈程序的思想
- win10系统安装+激活+去水印
- 维基百科中文语料库训练word2vec模型和使用总结
- 生成Xcode中各个尺寸的Mac App Icon
- Get_Web_banner(批量获取网站banner)
- 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问
- PJzhang:漏洞渗透测试框架“天使之剑(AngelSword)”
- spring获取Bean报错
- 稀疏近似最近点(SANP)
- Vue官方文档梳理-全局API
- 肺结节目标检测_体检单上的肺结节多半不是癌,千万别再自己吓自己
- 律师百度百科词条创建怎么做?怎么创建律师百科词条?
热门文章
- logging模块详细使用
- 电脑的锁屏密码忘记了怎么办?
- 坚持终身学习的重要性:只靠已有知识,你走不了多远
- 江北机场停车费多少钱一天,重庆江北机场附近停车场哪里最便宜
- 适合年轻人的副业项目,想要赚钱养家就不要再懒了
- 苹果发布会2014发布会简单总结
- VueJs探索之watch用法详解
- javaSE (十六)Randon、System类的方法(生成随机数、主动垃圾回收、终止jvm、对程序进行记时、System自带的复制数组的方法)
- 工业计算机英语作文,工业计算机,Industrial Computer,音标,读音,翻译,英文例句,英语词典...
- Java语言格式化返回日期为北京时间(东八区)