1.简介
1.官方是这么定义的,在计算机中,尤其是在网络应用中,称为会话控制。
2.session是存储在服务端的临时存储技术。
2.机制
服务端与用户建立一个会话的时候,会生成一个session_id作为唯一标识,并生成一个对应文件名的session文件保存信息,session_id保存在用户的cookie里面。
当客户端向服务器发起请求,调用session的时候,会生成一个唯一标识:session_id,session_id会通过http的首部字段setcookie,保存在客户端的cookie里面,在下一次请求中会根据cookie中保存的session_id找到对应的session,获取上一次状态信息。在这里面,session_id贯穿始末。
粗略画个流程图(session以file文件保存的情况下):
由图知,如果客户端禁用了cookie,会导致session无法使用,原因:session_id不能保存在cookie里面,客户端的每次请求服务端,服务端收到请求后,没找到session_id,就会重新创建session.解决方法是通过其他方式将sessionID传给客户端:
1. 重写URL:
①:修改php.ini
session.use_trans_sid=1
session.use_only_cookies=0
session.use_cookies=1
3.Sssion的一些应用
1.session_id可以自己设置:
在php中可以在session_start()前使用 session_id()来配置session_id,如果在php.ini文件中配置了session.save_handler=file,那么session会以文件的形式保存在硬盘中,一个会话对应一个session文件,seesion_id作为文件的名称,保存的位置可以在php.ini上的session.save_path上看到
2. session可以改变存储位置
Session也可以存储在redis、memcache,数据库等等中,php中改变配置文件的session.save_handler和session.save_path的值,如redis: session.save_handler = redis和session.save_path=tcp://127.0.0.1:6379
4.Php.ini中相关session的含义
1.session.save_handler = files #session的存储方式
2.session.use_cookies= 1 #使用cookies在客户端保存会话
3.session.use_only_cookies = 1 #去保护URL中传送session id的用户
4.session.name = PHPSESSID #session名称(默认PHPSESSID)
5.session.auto_start = 0 #不启用请求自动初始化session
6.session.cookie_lifetime = 0 #cookie存活时间(0为直至浏览器重启,单位秒)
7.session.cookie_path = / #cookie的有效路径
8.session.cookie_domain = #cookie的有效域名
9.session.cookie_httponly = #httponly标记增加到cookie上(脚本语言无法抓取)
10.session.serialize_handler = php #PHP标准序列化
11.session.gc_probability =1
12.session.gc_divisor =1000 #建议设置1000-5000
13.概率=session.gc_probability/session.gc_divisor(1/1000)
14.session.gc_maxlifetime =1440 #过期时间(默认24分钟,单位秒)
15.session.bug_compat_42 = off #全局初始化session变量
16.session.bug_compat_warn = off
17.session.referer_check = #防止带有ID的外部URL
18.session.entopy_length = 0 #读取的字节
19.session.cache_limiter = {nocache,private,pblic} #HTTP缓冲类型
20.session.cache_expire = 180 #文档过期时间(分钟)
21.session.use_trans_sid = 1 #trans_sid支持(默认0)
22.session.hash_function = 0 #hash方法{0:md5(128 bits),1:SHA-1(160 bits)}
23.session.hash_bits_per_character = 5 #当转换二进制hash数据奥可读形式是,每个字符保留位数
24.ession.save_path = "/var/lib/php/session" #session id存放路径