php.ini文件中关于cookie和session的设置

时间:2022-09-29 21:46:22

①  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保存路径,删除时需要对应。