session一二事
Posted cshaptx4869
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了session一二事相关的知识,希望对你有一定的参考价值。
一个访问者访问你的 web 网站将被分配一个唯一的 id, 就是所谓的会话 id. 这个 id 可以存储在用户端的一个 cookie 中,也可以通过 URL 进行传递. Session会话用来追踪每个用户的会话,使用服务器生成的SessionID进行标识,用以区分用户。Session默认以文件的形式存放在服务器的磁盘目录中,SessionID存放在服务器内存和客户机的Cookie里面。这样,当用户发出请求时,服务器将用户Cookie里面记录的SessionID和服务器磁盘中的SessionID进行比对,从而找到这个用户对应的Session文件进行操作。所以,如果客户机禁止Cookie的话,Session也不能使用。
session_start()开启会话,生成session_id,再用session_id()输出:
session_start();
$session_id = session_id();
$_SESSION[‘name‘] = 1;
通过已生成的session_id,开启会话,从而获取session中存储的值:
session_id($session_id);
session_start();
print_r($_SESSION[‘name‘]);
当session过多,一般磁盘文件数超过2000时,读写这个目录就会很慢。
1、可以做session文件的目录分级配置
session.save_path = "N;MODE;/path"
N:表示要设置的目录级别,
MODE:表示目录的权限属性,默认是600,
/path:表示session文件存放的根目录路径
session.save_path ="1;f:/wamp64/tmp"
表示在f:/wamp64/tmp目录下再生成1个子目录来保存session文件,注意php默认是不会自动创建文件夹的,需手工创建(脚本),目录名以0~9和a~z共36个可选单字组成,如,f:/wamp64/tmp/a,26位的session_id根据第1位的字符去找到对应目录存储
如果使用子目录来存储会话文件,那么垃圾回收机制没法自动发生,可使用脚本,
如,find /path/to/sessions -cmin +24 -type f | xargs rm
session回收机制(被动回收):
参数:
session.cookie_lifetime=0, 设定session_id在客户端cookie中的有效期限,单位秒,0表示到关闭浏览器,默认为0;
session.gc_maxlifetime=1440,设定session文件有效时间,单位秒
默认配置,当用户关闭浏览器,浏览器cookie中PHPSESSID失效清除,但服务器的sess_xxx文件并不会立马删除,
而是通过 当前时间减去session文件修改时间是否大于 gc.max_lifetime 来判断是否过期,若为true,则垃圾回收程序会清除session文件目录下所有过期的session文件。
失去客户端session_id引用的服务器session文件,不能在访问就一定会过期被清除,反之,若没有失去引用,只要用户有一个动作,哪怕是刷新,都会更新session文件的修改时间(前提是session文件要有数据)。
‘garbage collection‘ process is started on every session initialization
注意,启动垃圾回收程序是在session_start()函数调用时,有一定概率(session.gc_probability/session.gc_divisor)触发的。
以上是关于session一二事的主要内容,如果未能解决你的问题,请参考以下文章