php中session的运行机制
在PHP中session默认是以文件的形式存储于服务器的
而客户端和服务端则是通过session_id来完成握手的,默认情况下PHP会将session_id存储于cookie中,用户每次请求时该session_id都会通过cookie传到服务器,下面是php.ini中的相关配置信息:
session.save_path="C:\xampp\tmp" 文件的存储路劲
session.use_cookies=1 是否使用cookie存取session_id
session.name=PHPSESSID 存储session_id的键名
session.use_only_cookies=0 是否只使用cookie来处理session_id
如何改变session的默认存储方式:
在php中我们可以通过使用session_set_save_handler函数才改变这种默认方式,该方法有两种形式的重载
php < 5.4 : 接受接受6个回调函数来执行session的管理SessionHandlerInterface
打开(open):接受两个参数:1,文件路劲;2,session_id
关闭(close)
读取(read):读取session信息,接受一个session_id作为参数
写入(write):将信息写入session,接受一个session_id作为参数
销毁(destroy):销毁一个session,接受一个session_id作为参数
回收(gc):当出发session回收时调用,接受一个session的过期时间(lifetime)作为参数
php>=5.4 session_set_save_handler可以接受一个SessionHandlerInterface的实例来设置session的存储方式
我们可以通过实现SessionHandlerInterface接口,或者重写SessionHandler类方法的实现,来编写自定义的session
下面说说session的回收机制
在php中session的回收时由session的回收频率和过期时间决定的,在php.ini中表现为
session.gc_probability=1
session.gc_divisor=100
session.gc_maxlifetime=1440
gc_maxlifetime很好理解,表示session的过期时间1440秒
gc_probability/gc_divisor 为session回收的频率,这个怎么理解呢,每次在我们调用session_start()的时候我们都有可能调用gc方法对过期的session进行回收,如上面设置所示,这里回收的概率为1/100,如果用户的每次请求我们都去回收过期session可能会对服务器造成压力,特别是请求特别多的时候,所以往往session的回收频率应该根据站点的访问量来调节
session_start细节
session_start首先会生成一个session_id,默认情况下会将这个ID写入一个会话cookie,之后会调用open,read方法,生成全局变量$_SESSION,之后做gc处理,所以如果我们的web应用只有一个会话,那么这个会话的信息是永远不会丢失的即使我们的会话已经过期。
最新文章
- Java实现多线程并发
- Grunt教程——初涉Grunt
- 转发:在开发机上绕过Chrome同源策略的办法
- EWOULDBLOCK = EAGAIN
- 【转】android 内存泄漏相关收藏博客。
- PI-安装SoapUI on Windows
- ionic 安装教程
- JVM中锁优化简介
- 部署Redis主-从
- find用法积累
- Python 学习笔记4
- Neutron网络性能测试与分析(一) CVR
- 推荐系统那点事 —— 基于Spark MLlib的特征选择
- MongoDB操作集
- Mybatis批量更新比较
- Nexus私服搭建
- shell脚本--编写CGI代码(shell结合html)以及环境变量
- vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址
- Delphi Excel导入 的通用程序转载
- 【HDU1693】Eat the Trees(插头dp)
热门文章
- Unity NGUI制作scroll view
- ikely()与unlikely() 都等同于if, 此处只是做编译优化
- CGI编程完全手册
- 【动态规划】【最短路】Codeforces 710E Generate a String
- boost------bind的使用(Boost程序库完全开发指南)读书笔记
- SQL Server不区分大小写的问题
- Directx 3D编程实例:绘制可变速旋转的三角形
- Error parsing XML: not well-formed (invalid token) 报错+R文件消失解决的方法
- DFU工作过程中USB机制
- java——递归调用