1、session介绍
session,保存的是对象,存放在服务端,它通过sessionId来区分不同的客户端,sessionId是保存在客户端的(也就是cookier中),作为客户端与服务器的验证标识,它是一个24位的随机字符串,用户提交页面时,浏览器会把sessionId包含在HTTP头中提交给web服务器。
2、session使用
session_start();
每执行一次session_start(),就会生成一个新的session文件,但文件中内容为空。
赋值:$_SESSION['user'] = 'Tom';
删除:
session_destroy();
unset($_SESSION['id']) 只能删除单个session值,不能通过unset($_SESSION)删除所有的session。
上面的另种删除方式,只能删除session文件,也就是服务器上的session值,并未删除浏览器上的cookier。需要通过下面的方式删除:
setcookie(session_name(),'',time()-1,'/') 可以通过设置的时间戳小于当前的时间戳来删除cookie变量。
3、session值存储介绍
查看所有的session,可以查看session所在的文件夹,读取该文件夹中的文件。
文件中的内容就是session的值,比如:user|s:5:"Tom";id|i:100
意思是里面有两个session内容,user=Tom与id=100,
user|s:3:"Tom" s表示为string类型,长度为3;i表示为int类型。
4、php.ini一些关于session的一些设置
session.auto_start = 0; 如果设置为1,代码中不再需要写session_start();
session.cookier_lifetime = 604800 session有效期
session.cookier_path = / 表示session可以在整个网站下使用,如果改为 /temp/ 则表示 session只在temp文件夹下有效
5、session一些性能问题(垃圾回收机制)
session一般存储的是登录信息,但是用户一般不会正常退出,也就不会执行session销毁的程序,这样会导致session文件越来越多。而服务器一般会对文件的个数有限制 ,超出后会导致系统出错,因此session有内部的垃圾回收机制。
session.gc_probability
session.gc_divisor
session.gc_maxlifetime
session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。
session.gc_maxlifetime=30,session.gc_divisor=1000,session.gc_probability=1,就表示每一千个用户调用session_start()的时候,就百分百的会执行一次垃圾回收机制,将磁盘上没用的session文件删除。当session文件在30s后还没有被访问的话,则该session文件将会被视为“垃圾文件”,并且等待gc(垃圾回收)进程的调用的时候被清理掉。