[原创]简单修改,让CI自带的session类支持浏览器关闭自杀
我不知道这个论坛有没有人这么修改过,我没找到,所以发表下!都知道CI自带的session类默认是依靠php的cookie储存的,
其实cookie储存是有很多弊端的,大小限制,还有安全问题,所以非必要最好使用第三方session类库!
我使用他主要是因为我做的这个项目涉及到跨域的问题,所以我决定使用CI自带的session类!
可是很多人都发现了CI自带的session类不会随浏览器自杀,即使你把期限设置为0,他就变成永久!囧!
我看论坛也有很多人问,所以就简单修改下,让他支持随浏览器自杀!
复制一个Session.php到你程序目录里的libraries目录下,
修改行108-118:
if (is_numeric($expiration))
{
if ($expiration > 0)
{
$this->sess_lengths = $this->CI->config->item('sess_expiration')+time();
$this->sess_length = $this->CI->config->item('sess_expiration');
}
else
{
$this->sess_lengths = 0;
$this->sess_length = (60*60*24*365*2);
}
}
多加一个变量的原因就是因为这样简单,而不需要去修改其他的$this->sess_length
修改行310-317:
setcookie(
$this->sess_cookie,
$cookie_data,
$this->sess_lengths,
$this->CI->config->item('cookie_path'),
$this->CI->config->item('cookie_domain'),
0
);
这样子就可以了!
只要在config.php中设置$config['sess_expiration'] = 0;
session就会随浏览器自杀了!
如果不是特殊需要,还是推荐使用其他第三方session类库!
[ 本帖最后由 vale888 于 2008-11-6 17:12 编辑 ] 嗯,支持一个。:) 看来你这个不是1.7的啊 1.7的可以自杀吗,呵呵 1.7版本 不可以使用上面的办法 但是换汤不换药 其实要明白LZ说的意思 1.7 修改也不难
复制 session.php 到libraries下面
修改
89行
if ($this->sess_expiration == 0)
{
$this->__s_length = 0;
$this->sess_expiration = (60*60*24*365*2);
}
else
{
$this->__s_length = $this->CI->config->item('sess_expiration')+time();
}
找到 function _set_cookie($cookie_data = NULL) 这个方法
将 setcookie 这个操作修改为下面
setcookie(
$this->sess_cookie_name,
$cookie_data,
//$this->sess_expiration + time(),
$this->__s_length,
$this->cookie_path,
$this->cookie_domain,
0
);
经过测试 可以自杀 不过会不会对 写入数据库型的session保存方案有没有影响 还没测试 数据库型的session保存方案好像不行的。有没有清除的方法啊? ;P谢谢。。。。 谢谢。。。:$ :)好文收藏了 remark一下
页:
[1]