• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

php中session的运行机制

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在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应用只有一个会话,那么这个会话的信息是永远不会丢失的即使我们的会话已经过期。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【黄啊码】这种PHP验证码你值得拥有(注:支持中文)发布时间:2022-07-10
下一篇:
nginx下php频繁卡死502发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap