您的位置:首页 > 其它

设置一个严格的SESSION过期时间

2013-08-19 14:21 399 查看
认识一:当我们需要更改session生存时间的时候通行的做法是更改php.ini文件中

;Nameofthesession(usedascookiename).

[code]session.name=PHPSESSID

;Initializesessiononrequeststartup.

session.auto_start=0


;Lifetimeinsecondsofcookieor,if0,untilbrowserisrestarted.

session.cookie_lifetime=0//(单位为秒)


;Thepathforwhichthecookieisvalid.

session.cookie_path=/


;Thedomainforwhichthecookieisvalid.

session.cookie_domain=

[/code]

session.cookie_lifetime这项的数值,数值为0即关闭浏览器即cookie信息失效,如果是用户登录信息,那么关闭页面在打开就需要重新登录。

当将此设置为一定的值后,在指定的秒数内重新打开该页面,仍旧保留以前的cookie数据并且自动登陆。

再指定有效生存时间的情况下另一种不常见的做法是:我们在浏览器中挂载一段js脚本使用setInterval轮询的访问网站页面来延长session存活时间,不过这是在没有权限操纵服务器的情况下会采用的做法。

额外的说明:

PHP中设置的session时间测试过还是相当准确的,产生的session文件如果已经过期而没有被gc回收(也就是session的概率销毁清除)文件本身还保留在服务器上然后已经过期,服务器是不会去使用这个过期session文件中的session信息的。对于使用session控制的某些保持登录状态时间类信息可以放心大胆的使用。

项目中的做法:

session作为保持回话信息的重要工具怎么说都会开启,在整个程序的入口文件中我们程序启动即调用session_set_cookie_params();

session_set_cookie_params()的用法说明:

Setcookieparametersdefinedinthephp.inifile.Theeffectofthisfunctiononlylastsforthedurationofthescript.Thus,youneedtocallsession_set_cookie_params()foreveryrequestandbeforesession_start()iscalled.

或者入口文件中实例化出来一个session_base()对象


classsession_base()

[code]{
var$max_life_time=1440;//SESSION过期时间||设为0即关闭浏览器即销毁session

var$my_session_name='logonmy'

var$session_cookie_path='/';//SESSION存储路径

var$session_cookie_domain='';//这里为空的话即为当前站点域名,也可以指定作用域名[.demo.com]

var$session_cookie_secure=false;//一般都为false



publicfunction__construct()

{

$this->_session_base();

}


privatefunction_session_base()

{

//session_name($this->$my_session_name);//如果我们不想使用PHPSESSID作为session名称我们可以改成于本站相关或者喜欢的名称

session_set_cookie_params($this->$max_life_time,$this->$session_cookie_path,$this->$session_cookie_domain,$this->$session_cookie_secure);

session_start();

}

}

[/code]

其实说白了不管session_get_cookie_params();或者session_set_cookie_params();都是对配置文件中session相关属性读和写。

认识二:关于session的垃圾回收机制

还是来自php.ini中的定义


;Definetheprobabilitythatthe'garbagecollection'processisstarted

[code];oneverysessioninitialization.
;Theprobabilityiscalculatedbyusinggc_probability/gc_divisor,

;e.g.1/100meansthereisa1%chancethattheGCprocessstarts

;oneachrequest.


session.gc_probability=1

session.gc_divisor=100


;Afterthisnumberofseconds,storeddatawillbeseenas'garbage'and

;cleanedupbythegarbagecollectionprocess.

session.gc_maxlifetime=1440

[/code]

这个设置:session在产生后的1440秒后失效,会被认为garbage(垃圾),session.gc_probability和session.gc_divisor作为分子和分母,session.gc_probability/session.gc_divisor得到启动垃圾回收gc进程(删除已经超出gc_maxlifetime的session文件)的发生概率,值得一提的是为什么不把session.gc_probability和session.gc_divisor分别设置为100和100即为100%的发生概率,这是因为php召唤gc进程需要耗费计算资源,产生不必要的开销。所以一般都会保留默认值。对于大型或者大访问量的网站,还会降低这一概率。

留意:php.ini中session.cookie_lifetime和session.gc_maxlifetime其中session.cookie_lifetime是以秒数指定了发送到浏览器的cookie的生命周期。session.gc_maxlifetime指定了服务器session文件生存周期。最好将两个设置成相同值。

参考:

1:关于SessionTimeOut的时间控制总结

2:session的垃圾回收机制

3:http://www.111cn.net/phper/php/45077.htm

4:http://home.sgnet.cc/blog/?p=91
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: