① session.name
该配置用于设置session的名字,默认session.name = PHPSESSID,这个值可以通过 session_name() 来获取.
Session_name(123);
Echo session_name(); //输出123
② session.use_trans_sid默认是0,
session.use_trans_sid = 0
说明:若将其设为1,表示给每个url启用 session名=sessionId ,对安全有影响,不推荐开启
③ sessoin.save_path= 路径
可以配置把网站的session文件放在哪个目录下.
④ 三个一组:
session.gc_maxlifetime = 1440
说明:session默认最大生命周期
session.gc_probability = 1
session.gc_divisor = 1000 与上一个合并起来,表示一个机率 1/1000。
当 session_start()执行时,该函数会调用gc(即垃圾回收机制),但调用的概率是 1/1000。当一个网站的访问量很大时,其概率是也是相当大的。越是大型的网站,其概率设置要越小。
关于垃圾回收机制,事实上是调用了一个删除文件的方法。参见手册中的session_set_save_handler的说明,里面有一个方法,function gc($maxlifetime),该方法会遍历session保存路径里的所有session文件,查看(文件的最后修改时间+设置的maxlifetime)是否 < 当前时间time()。如果小于,表示已经过期,则会把该文件删除。所以说,如果网站很多用户访问,按照用户访问数*调用的概率,其实际上调用的次数也是比较大的。
请简述php 中 session的垃圾回收机制?
答: session的垃圾回收机制于 php.ini中的三个配置相关:
一个是指定session生命周期, 一个是启动的概率 ,该概率是计算,当用户操作session的时候(比如 session_start())就可能启动我们的session垃圾回收机制,去删除超时的session文件., 如果网站规模大,可以把启动 gc (garbagecollection)
的概率设置小.
说明: 上面三个配置,共同来决定,session的垃圾回收清除.
说明: 当某个用户操作session的时候,会使用到session_start(), 该函数会调用gc ,但是其概率是 session.gc_probability/session.gc_divisor
原因是: 对于一个网站说,有很多用户访问,因此当大量用户访问的时候,概率很多. 如果网站的规模越大,我们建议把这个概率设置越小.
演示
session.gc_maxlifetime = 30
说明:session默认最大生命周期
session.gc_probability = 1000
session.gc_divisor = 1000
⑤ session.cookie_lifetime= 0
该设置可以指定cookie默认生命周期,默认是0,表示当关闭浏览器后,该cookies失效,你可以这样
setcookie(“名字”,”val”,time()+3600);
setcookie(“名字”,”val”);
⑥ 自定义会话处理器
$_SESSION[‘name’]=”shunping”;
说: session 的各种操作,都可以同自定义会话处理来自己决定, 靠
session_set_save_handler
如果你要自定义处理session,需要在php.ini文件中做一个设置.
session.save_handler= [files\user]
默认情况下,session.save_handler = files,表示调用的是系统定义好的处理器(所谓处理器,其实就是一大堆函数/方法)。您可从将session.save_handler设置成 user 或者 memcache,甚至是网络文件系统(云计算)。
session.save_handler = user:表示调用自定义的会话处理器; session.save_handler = memcache:表示...略....(大致是保存在内存里,效率更高)。
session数据可以存放的位置
(1) 文件
(2) 数据库
(3) 内存(memcache)
(4) 网络文件nfs
⑦ sesson和cookie的对比:
1、存放的位置
cookie保存在客户端,session保存在服务器端的文件系统/数据库/memcache等。
2、安全性
session因为保存有服务器端,安全性无疑更高一些。
3、网络传输量
cookie通过网络在客户端与服务器端传输,会占用一些带宽;而session保存在服务器端,不需要传输。
4、保存时间(生命周期),以20分钟为例
cookie的生命周期是累计的,从创建时就开始计算,20分钟后生命周期就结束,即cookie无效;session的生命周期是间隔的。从创建时开始计时,如果20分钟内,没有访问过session,那么session会在20分钟时失效。而如果在20分钟内的任一时间访问过session,那么,session的生命周期将重新开始计算。关机会造成session生命周期的结束,但是对cookie没有影响。
5、session和cookie的生效路径
cookie在默认情况下,cookie只在当前文件的目录下生效,一般需要设置setcookie的第四个参数为根目录,使得整个网站所在页面都生效;session默认情况下是根目录下生效(可以通过查看cookie的PHPSESSID信息知道,或者通过php.ini文件里的session.cookie_path来设置)。
6、访问范围
session为一个用户浏览器独享;cookie为多个用户浏览器共享
⑧ 是否使用cookie
session.use_cookies = 1:是否使用cookie,默认使用。
⑨ cookie保存路径设置
session.cookie_path = / :cookie保存路径,删除时需要对应。