001:session的生成、回收、存储机制

1.php中session的生成机制

设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态),session存储于服务器,他利用cookie来区别用户,当我们在代码中调用session_start();时,php会同时往SESSION的存放目录(默认为/tmp/)和客户端的cookie目录各生成一个文件。

session的文件名称:  
cookie

服务器自动生成了一个cookie,cookie的名称未PHPSESSID,cookie内容是一串字符,这串字符就是{SESSIONID}。

就是说,当我们使用session时,php会先生成一个SESSIONID号,再在我们服务器默认目录下生成一个文件,文件名为sess_{SESSIONID},同时在当前用户的客户端生成一个cookie.这样PHP会为每一个用户生成一个SESSIONID,也就是说一个用户一个session文件。php第一次为某个用户使用session时就像客户端写入cookie,当这个用户以后访问时,浏览器会带上这个cookie,php在拿到cookie后就读出里面的SESSIONID,拿着这个SESSIONID去session目录下找对应文件,找到后在调用$_SESSION['bilg]的时候显示出来

2.php的session回收机制

php提供了一种过期回收机制,在php.ini中session.gc_maxlifetime为session设置了生存时间(默认为1440s)。如果session文件的最后更新时间到现在超过了生存时间,这个session文件就被认为是过期的了。在下一次session回收的时候就会被删除。

那下一次session回收是在什么时候呢?这和php请求次数有关的。在PHP内部机制中,当php被请求了N次后就会有一次触发回收机制。到底是请求多少次触发一次是通过以下两个参数控制的:

session.gc_probability = 1

session.gc_divisor = 100

这是php.ini的默认设置,意思是每100次PHP请求就有一次回收发生。概率是 gc_probability/gc_divisor 

这是服务端session的过期机制,再来看看客户端cookie的过期机制

如果cookie失效了,浏览器自然发送不了cookie到服务器,这时即使服务器的session文件存在也没用,因为php不知道要读取哪个session文件,php在创建session的痛死会为cookie也设置一个生命周期,在php.ini里面:session.cookie_lifetime 。这个值默认是0,代表浏览器一关闭SESSIONID就失效。

那就是说我们把session.gc_maxlifetime和session.cookie_lifetime设置成同一个值就可以控制session的失效时间了。

3.php中session的客户端存储机制

php中session的客户端存储机制不只有cookie,还可以通过页面GET传值的方式。平php在cookie被禁用时,自动通过get方式跨页传递SESSIONID,前提是php.ini里面session.use_trans_sid为1。这时当我们在客户端禁用了cookie时使用了session,并在当前页面通过点击链接到另一页面时,PHP会自动在链接上添加SESSIONID参数,像这样:nextpage.php?SESSIONID=2bd170b3f86523f1b1b60b55ffde0f66。但是这样不够安全

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • session原理总结[转] 之前在学校的时候,只知道session与cookie的区别在于:session是保存...
    foolgry阅读 592评论 0 1
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,381评论 1 17
  • PHP Session 本文由以下两篇博客整理而成, 传送门如下:Cookie和Session的作用,区别和各自的...
    其实我很dou阅读 1,204评论 0 1
  • 我对植物没什么链接,基本我的概念里除了树这个词就是花草,没有太具体的认识。养花也很没有头脑,上盆栀子花就被我养死了...
    今生要舍得阅读 258评论 0 0
  • 郭相麟 生活中人们交往时,需要掌握一些待人接物的礼节! 如大家见面握手问声好,双手合十表尊敬,在礼尚往来中话友...
    郭相麟阅读 138评论 0 0