session高级(session入库)
我们知道,session是一种会话技术,用来实现跨脚本共享数据。
在之前的php会话技术中我们介绍过,session是存放在服务器端的文件里的,因此session有可能因为文件数量过多,会在查询session文件以及读取的时候产生压力。一般我们有三种解决方案
1.使用文件分层(缺点:I/O操作是系统的一个瓶颈,即使分层也不能避免此问题)
2.将session放入数据库
3.将session放在内存中(非关系性数据库)(缺点:对服务器内存要求教高)
因此我们选用一个折中的办法,将session存入mysql数据库,也就是我们要讲的重点,
session入库技术:
要实现session入库,首先我们要了解session 机制:
什么是session机制:
在php中,session可以理解为一套单独的小系统,在该系统中有很多关于session的处理方法,用来解决各种问题,用户只需要在session之外,调用session_start函数(session系统的一个接口)
其他操作都是session系统帮忙去处理

//session入库
//以为修改session机制必须借助session_set_save_handler()函数,该函数需要6个可以调用的回调函数,因此需要创建6个人对应的函数
//1.开启session机制
function sess_open()
{
//开启资源
//连接数据库
mysql_connect('localhost','root','');
mysql_query('set names utf8');
mysql_query('use session');
echo __FUNCTION__,'<br/>';
}
//2.关闭session
function sess_close()
{
//关闭资源
mysql_close();
echo __FUNCTION__,'<br/>';
}
//3.读取session
function sess_read($sess_id)
{
//从数据库读取数据
//根据sess_id(由系统提供)获取数据
//读数据时要过滤掉过期的数据
$expire=time()-ini_get('session.gc_maxlifetime');
$sql="selsct * from session where sess_id='{$sess_id}' and sess_expire>='{$expire}'";
$res=mysql_query($sql);
//得到的是一个数组
if($sess=@mysql_fetch_assoc($res))
{
//得到一个序列化后的字符串
//要进行反序列化,read只负责读取数据,不负责加工数据
return $sess['sess_info'];
}
echo __FUNCTION__,'<br/>';
}
//4.写入session
function sess_write($sess_id,$sess_info)
{
//向数据库中写入数据
$time=time();
$sql="replace into session values('{$sess_id}','{$sess_info}','{$time}')";
mysql_query($sql);
echo __FUNCTION__,'<br/>';
}
//5.销毁session
function sess_destroy($sess_id)
{
$sql="delete from session where sess_id='{$sess_id}'";
return mysql_query($sql);
echo __FUNCTION__,'<br/>';
}
//6.回收session
function sess_gc()
{
//从数据库删除过期的session数据
//判断session是否过期,过期的删除
$expire=ini_get('session.gc_maxlifetime');
//得到最迟的时间,在$expire之前的都是过期的
$expire=time()-$expire;
$sql="delete from session where sess_expire < '{expire}'";
return mysql_query($sql);
echo __FUNCTION__,'<br/>';
}
//使用session_set_save_handler()修改session机制
session_set_save_handler('sess_open','sess_close','sess_read','sess_write','sess_destroy','sess_gc');
//想要使用session,必须要用session_start()来开启
session_start();
$_SESSION['name']='wangqixing';
$_SESSION['age']='23';
//session_destroy();
session高级(session入库)的更多相关文章
- 懒加载session 无法打开 no session or session was closed 解决办法(完美解决)
首先说明一下,hibernate的延迟加载特性(lazy).所谓的延迟加载就是当真正需要查询数据时才执行数据加载操作.因为hibernate当中支持实体对象,外键会与实体对象关联起来.如 ...
- PHP自带Session隐患(session文件独占锁引起阻塞)
PHP自带Session隐患(session文件独占锁引起阻塞) PHP默认的会话处理器是session.save_handler = files(即文件).如果同一个客户端同时并发发送多个请求(如a ...
- PHP session有效期session.gc_maxlifetime的设置方法
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...
- hibernate 管理 Session(单独使用session,不spring)
Hibernate 本身提供了三个管理 Session 对象的方法 Session 对象的生命周期与本地线程绑定 Session 对象的生命周期与 JTA 事务绑定 Hibernate 托付程序管理 ...
- ASP.NET Web Service中使用Session 及 Session丢失解决方法 续
原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Sessio ...
- org.hibernate.LazyInitializationException...no session or session was closed
org.hibernate.LazyInitializationException:failed to lazily initialize a collection of role:cn.its.oa ...
- Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享
Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...
- PHP session有效期session.gc_maxlifetime详解
一个已知管用的方法是,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储到数据库,这样可以通过SQL语句来删除所有过期的sessio ...
- HttpContext.Current.Session 和 Session 的区别
Session(会话)通常指一个动作从开始到结束不间断的一个动作. 例如“打电话”,通常是“1.拿起电话--2.拨对方号码--3.对方截图--4.挂机”.这四个步骤从完成到结束组成了一个基本的Sess ...
- session 之session混乱解决方法(转)
知道了session混乱产生的原因之后,也就知道了问题的根源.同时也引出了很多的问题: 1.如何记录住在线人员(这里只有帐号的系统用户,不包括访客): 2.如何限制同一个帐号在同一时间段内只能够登陆一 ...
随机推荐
- ORM一对多查询对象
正向查询: 取人民日报出版社出版的所有书籍 方式一: pub_obj = Publish.objects.filter(name='人民日报')[0] ret = Book.objects.filte ...
- Tesseract-OCR4.0版本在VS2015上的编译与运行(转)
最近刚开始接触识别库引擎方面的知识,由于项目中需要使用光学识别处理模块,在老师与朋友的推荐下,我开始接触tesseract光学识别库,在最开始从GitHub上下载的源代码进行编译的时候,出现了许多意想 ...
- C#实现联合体
[StructLayout(LayoutKind.Explicit, Size = )] public struct TypeTransform { [FieldOffset()] public fl ...
- linux 3.10 一次softlock排查
x86架构.一个同事分析的crash,我在他基础上再次协助分析,也没有获得进展,只是记录一下分析过程.记录是指备忘,万一有人解决过,也好给我们点帮助. 有一次软锁,大多数cpu被锁,log中第一个认为 ...
- LG Optimus L90 [D415] T-Mobile 刷机
1 先使用[ROOT大师]ROOT手机. 2 执行以下ADB命令. adb shell su //备份 dd /by-name/laf of=/sdcard/laf.img. //清除 dd /by- ...
- sp_executesql 或者 EXECUTE 执行动态sql的权限问题
当 sp_executesql 或 EXECUTE 语句执行字符串时,字符串将作为它的自包含批处理执行.SQL Server 会将字符串中的一个或多个 Transact-SQL 语句编译为独立于批处理 ...
- linux网卡桥接问题与docker网卡桥接问题
一.linux网卡桥接问题 在linux上创建桥接网卡,与真实的物理网卡进行绑定,相当于在linux中创建了一个虚拟的交换机,以linux网卡地址为源地址的数据,从桥接网卡br0进入,从实际的物理网卡 ...
- JAVA 课堂测试
package ACC; /*信1705-2班 * 20173623 * 赵墨涵 */ public class Account { String accountID; String accountn ...
- jekins的一些配置
GotPC_Excel_Branches丢弃旧的构建 svn http://devsvn.uuzuonline.com/GOT_PC_PRIVATE/config/trunk构建Execute she ...
- 小程序 css3走马灯效果
<view class='notable-container' style='background:#ffffff;'> <view style='z-index:2000;back ...