深入了解session
session
-
为了解决在多个请求的页面之间的关联,让多个页面都能读取到某个信息,存在于服务端
运行机制:
-
首先如果通过
session.start()
开启session
后,此时会自动生成session_id
,用来标识此次是哪个用户在访问 -
同时会自动向
cookie
中写入一个名为PHPSESSID
的变量,值为session_id
,若此次会话没有结束,再次访问时,服务器会读取这个PHPSESSID
的cookie
是否过期是否有值,如果有则使用;没有会重新生成一个session_id
,然后再生成PHPSESSID
这个cookie
-
存储数据:会以
sess_前缀 + session_id
的形式存在服务器的临时目录中,每生成一个session_id
就会新生成一个文件 -
写入数据:序列化写入,当读取
session
变量时,先会读取cookie
中的PHPSESSID
,获取session_id
,然后根据这个查找文件获取对应的数据 -
SID
是一个系统常量,包含着会话名以及会话ID
的常量,如果会话ID
已经在cookie
中存在的则SID
为空
session的配置
session.save_handler = files
:表示session的存储方式,默认为文件方式
session.save_path
:保存路径
session.use_cookies
:默认值为1,表示会在浏览器创建cookie.。。,
session.name = PHPSESSID
:设置cookie
中保存session_id
的属性名
session.auto_start = 0
:设置是否默认开启session
,默认不开启
session.cookie_lifetime = 0
:设置cookie
过期时间
垃圾回收机制:
-
代码处理
-
使用session配置:
session.gc_probability /session.gc_divisor
//会话初始时启动gc(garbage collection)的概率,session.gc_divisor默认为100
session.gc_maxlifetime // 当超过设置时间未调用,就会被认为是垃圾文件