用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7597|回复: 9
收起左侧

[库 Library] [原创]简单修改,让CI自带的session类支持浏览器关闭自杀

[复制链接]
发表于 2008-11-6 17:08:16 | 显示全部楼层 |阅读模式
我不知道这个论坛有没有人这么修改过,我没找到,所以发表下!

都知道CI自带的session类默认是依靠php的cookie储存的,
其实cookie储存是有很多弊端的,大小限制,还有安全问题,所以非必要最好使用第三方session类库!
我使用他主要是因为我做的这个项目涉及到跨域的问题,所以我决定使用CI自带的session类!
可是很多人都发现了CI自带的session类不会随浏览器自杀,即使你把期限设置为0,他就变成永久!囧!
我看论坛也有很多人问,所以就简单修改下,让他支持随浏览器自杀!

复制一个Session.php到你程序目录里的libraries目录下,

修改行108-118:
PHP复制代码
 
                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:
PHP复制代码
 
                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 编辑 ]

Session.rar

3.88 KB, 下载次数: 59

修改完的Session.php

评分

参与人数 1威望 +5 收起 理由
Hex + 5 原创内容

查看全部评分

发表于 2008-11-6 17:21:32 | 显示全部楼层
嗯,支持一个。:)
发表于 2008-12-30 16:49:34 | 显示全部楼层
看来你这个不是1.7的啊
发表于 2008-12-30 17:26:22 | 显示全部楼层
1.7的可以自杀吗,呵呵
发表于 2009-1-11 14:28:29 | 显示全部楼层
1.7版本 不可以使用上面的办法 但是换汤不换药 其实要明白LZ说的意思 1.7 修改也不难

复制 session.php 到libraries下面

修改

89行

PHP复制代码
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 这个操作修改为下面
PHP复制代码
setcookie(
                                        $this->sess_cookie_name,
                                        $cookie_data,
                                        //$this->sess_expiration + time(),
                                        $this->__s_length,
                                        $this->cookie_path,
                                        $this->cookie_domain,
                                        0
                                );
复制代码


经过测试 可以自杀 不过会不会对 写入数据库型的session保存方案有没有影响 还没测试
发表于 2009-1-12 12:37:19 | 显示全部楼层
数据库型的session保存方案好像不行的。有没有清除的方法啊?
发表于 2010-11-1 17:40:03 | 显示全部楼层
谢谢。。。。
发表于 2010-11-3 09:45:38 | 显示全部楼层
谢谢。。。
发表于 2010-11-17 20:29:38 | 显示全部楼层
:)好文收藏了
发表于 2011-12-8 22:49:10 | 显示全部楼层
remark一下

本版积分规则