COOKIE、SESSION之彻底搞定!返回列表
上传时间:2015-02-02 内容关键字:COOKIE,SESSION,COOKIE和SESSION
4. session关于php.ini配置项:
我们知道一个session有2方面的数据共同发挥作用:
1:客户端的cookie
2:服务器端的session文件
要想让session失效也是要从这2个角度来考虑的。
当session.auto_start = 1的时候,每个页面不再用session_start()就可以自动开启,但我们一般不建议利用配置文件 开启session,因为这样的话PHP的一些功能也就受到限制执行不了了,这个时候便不能把对象放入session当中 了,因为类的定义必须在启动session之前加载,而自动设为1的时候,某页面的类还未加载session就已经是开 启 状态了。
在php.ini里,下面的选项控制PHPSESSID的cookie的生命周期,以秒为单位。
注意:如果用户篡改了cookie,让cookie的生命周期为1年,那你也判断不出来。
如果想严格的让sesion就半个小时有效,可以这样:
$_SESSION[‘time’] = 登录时的时间戳
检验session的开启时间。
为什么PHPSESSID对应的cookie失效以后,对应的SESSION也会跟着失效呢?因为虽然服务器中保存着session信息,但是客户端浏览器中的PHPSESSID已经没有了,无法返回给服务器了,也就找不到对应的SESSION值了,就相当于银行里有钱,但是银行卡丢了,钱还是无法取出来。
思考:
如果浏览器中的PHPSESSID(cookie)失效了,难道服务器中的SESSION值还保存着一直占用着空间吗?
答案:
当然不是啦,因为session会定期的清理内存中的垃圾文件。
session的有效路径:
session的有效区域取决于cookie,cookie在哪儿有效,session自然就能读到。
如下图:这个配置项就指定了PHPSESSID这个cookie的有效路径是 / 路径,自然session无论在多深的目录下设 置,而session在整个网站都有效。
cookie只能存储字符串/数字这样的标量数据,而session还可以存储数组/对象(除了资源型,其他7种都可以)。
注意:如果你把对象存储在session里,那么另一个读取session的页面,也必须有此对应的类声明才合理。否则,从session里分析出一个对象却没有与之对应的类,则会提示:
__PHP _Incomplete_Class Object 错误信息,意思是对象对应的类不完整。