session的细节讨论

<span style="font-size:18px;"><?php
/*
 *session的细节讨论:
① session数据默认存放时间是 1440秒, 这个时间可以通过 php.ini文件来修改
  session.gc_maxlifetime = 1440
     时间可以自定 ,修改后,也要重新启动apache,
    这个时间是指定在1440秒内,没有使用session文件,该session才会被当做垃圾,从而被回收.
② session 文件存放的路径是可以修改 php.ini 文件
  session.save_path = "c:/mysession"
     修改后,需要重新启动apache
③ 在使用session的时候,应当保证 对session进行初始化,
     方法1: 在需要使用session页面都写入 session_start(); 
     方法2: 在php.ini 文件中,配置session.auto_start=1 (不推荐,会影响效率)
*/
session_start();
//session_id() 返回当前会话session ID
echo "sessionid=".session_id();
?></span>

session的细节讨论_第1张图片

即靠sessionID在不同页面之间传递(传递方式为cookie传递)

浏览器关闭后session自动销毁问题注意:

Garbage Collection process对过期session销毁,但是,并非一过期就销毁,换句话说,它是以一定的几率进行的。如果一过期就销毁,当访问量大的时候,销毁session势必会占用相当的资源

你可以看看php配置文件中
session.gc_probability = 1
session.gc_divisor = 1000
这两个参数的意思千分之一的几率启动GC

是以一定几率进行GC,默认情况下每次请求以1/100的几率进行SESSION GC,换句话说,请求100次就有可能命中一次session gc.也就是说session虽然过期了,但不一定会立即被删除.session数据存于文件是一般这么设置的,你想想,一旦你的用户量上来了,你设置100/100的几率删除session,那么每发一次请求,就处理一次session gc,这个势必增加了一些不必要的i/o损耗.

而且会话是否结束,不应该仅凭关闭浏览器视为会话的结束,拿session use cookie来说,这要看cookie的失效设置是否设置了关闭浏览器,cookie即过期.即php.ini的session.cookie_lifetime是否设置为0.否则的话,cookie在有效期内,即使是关闭浏览器再重新打开,请求头内一样保留之前的session id,这时候发送请求给服务器,只要相应的session文件被删除,会话仍然会继续.


你可能感兴趣的:(session的细节讨论)