博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php中session的运行机制
阅读量:6495 次
发布时间:2019-06-24

本文共 1304 字,大约阅读时间需要 4 分钟。

在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中我们可以通过使用函数才改变这种默认方式,该方法有两种形式的重载

php < 5.4 : 接受接受6个回调函数来执行session的管理

打开(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的存储方式

我们可以通过实现接口,或者重写类方法的实现,来编写自定义的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应用只有一个会话,那么这个会话的信息是永远不会丢失的即使我们的会话已经过期。

 

转载于:https://www.cnblogs.com/xiaodo0/p/3604556.html

你可能感兴趣的文章
数据绑定(数据源控件 -- ObjectDataSource)
查看>>
微信点单
查看>>
selenium操作页面元素总结
查看>>
vim 命令
查看>>
Ubuntu 16.04 LTS安装sogou输入法详解
查看>>
计算几何专题
查看>>
GNU/Linux 正则表达式与三剑侠(grep,sed,awk)(精)
查看>>
36、自定义控件详解(一)-- 自定义属性
查看>>
DOM学习笔记二
查看>>
[Array]189. Rotate Array
查看>>
iuap
查看>>
inkscape
查看>>
关于C语言中单双引号的问题
查看>>
HDU1200 POJ2039 ZOJ2208 UVALive3084 To and Fro【密码】
查看>>
CCF201403-1 相反数(100分)
查看>>
表单通过连接数据库数据进行验证
查看>>
redis hash操作 list列表操作
查看>>
利用Hibernate 框架,实现对数据库的增删改查
查看>>
mysql开启远程连接权限
查看>>
关于商米D1S,USB默认权限在关机后丢失的FAQ
查看>>