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

急:CI Session生成后,Cookie放在什么地方

[复制链接]
发表于 2009-3-31 10:17:49 | 显示全部楼层 |阅读模式
本帖最后由 hahacc 于 2009-3-31 21:09 编辑

本来是另外一个帖子,为了简化,特此修改一下。
$this->session->set_userdata('username'=>'admin');
这样之后,获取用户名采用方法:
$this->session->userdata('username');//得到admin,没有问题

不过,问题来了:
CI默认将session数据存储在Cookie里。
首先,当调用了$this->session->set_userdata('username'=>'admin');之后,用Firefox的web developer插件查看,并没有发现有名为ci_session或者username的cookie
第二,有一个名为PHPSESSID的cookie,其值为一串数字和字母。(这个有什么作用呢,当我删除这个cookie后,发现登录的信息都失去了。)
第三,既然CI将session数据存储在cookie里,又有一个cookie helper,那么为什么还要使用CI 的session呢,CI的cookie helper不就是CI 的session吗
非常迷惑,感谢大家帮助!!
发表于 2009-3-31 11:14:49 | 显示全部楼层
CI 的 Session 类库就是在 cookie 中存储的,前提条件是你没打开数据库存储。
如果打开数据库存储,并建立相应的表,那在 cookie 中只有一个 session id,数据都在数据库中。

PHPSESSID 就是你的 session id,PHP 就是根据这个识别你是不是同一个人的,这是 PHP 基础知识和 CI 无关。
 楼主| 发表于 2009-3-31 17:56:26 | 显示全部楼层
2# Hex
谢谢HEX老大。
可是,我在config.php中的配置:
$config['sess_use_database'] = FALSE;
就是不用数据库存储。我用Firefox查看cookie,看到有一个PHPSESSID,也有相应的值(一长串)。但是,我用$this->session->set_userdata()设置的session admin,怎么找不到这个cookie的值呢?
$session_data = array('admin'=>$this->input->post("username");
$this->session->set_userdata($session_data);
这样设置,不应该有个名为admin的cookie的吗?既然有,应该用JS的方法也能够得到这个cookie的值啊。
 楼主| 发表于 2009-3-31 18:21:47 | 显示全部楼层
本帖最后由 hahacc 于 2009-3-31 18:23 编辑

其实,我的问题很简单,就是存放CI的session类的数据的cookie哪里去了?
手册原话:“
以上数据将会用以下数组格式序列化并存到cookie里:

[array]
(
     'session_id'    => random hash,
     'ip_address'    => 'string - user IP address',
     'user_agent'    => 'string - user agent data',
     'last_activity' => timestamp
)





就是这个cookie在什么地方,为什么用JavaScript的方法得不到数据呢?(而用$this->session->userdata()则可以得到)。
发表于 2009-4-1 09:07:57 | 显示全部楼层
这个么办法了,我的session是自己写的类,没用CI_Session
自己写的session类把session和cookie统一了,单管线操作用户数据
发表于 2009-4-2 12:37:20 | 显示全部楼层
关于这个问题,CI 的 Session 不一定就是按照你设置的 name 作为 cookie 的 name,具体你还是要参考其源代码才能了解细节,否则只能是很肤浅的。
发表于 2009-4-2 23:58:55 | 显示全部楼层
放session的cookie不是存在服务器端的么?在客户端上没道理能查的到吧,
不然不是太不安全了~~~~~~~
发表于 2009-4-3 12:42:27 | 显示全部楼层
放session的cookie不是存在服务器端的么?在客户端上没道理能查的到吧,
不然不是太不安全了~~~~~~~
BillyFan 发表于 2009-4-2 23:58

我囧,cookie是保存在客户端的电脑
 楼主| 发表于 2009-4-5 12:22:34 | 显示全部楼层
其实,这个问题我解决了。
用到了三种技术同时处理cookie:php<setcookie>,Javascript<document.cookie>,CI<delete_cookie>。
搞了很长时间,基本没有吃晚饭。
哪天把代码发上来吧。
我要重新复习一下PHP,JS,CSS等相关知识一下了,感觉淡忘了很多。
 楼主| 发表于 2009-4-5 20:58:00 | 显示全部楼层
本帖最后由 hahacc 于 2009-4-5 21:00 编辑

设置cookie时用setcookie<php,注意/设置path;读取时用getCookie<自定义JS,结合document.write+php>;删除时用delete_cookie<CI的cookie helper>>
PHP复制代码
 
function logout(){//退出登录
                        if($this->session->userdata('admin')){//                                
                                $this->session->unset_userdata('admin');//admin退出
                        }
                        else{
                                $this->session->unset_userdata('common');                                
                        }
                        //再清除cookie
                        delete_cookie('yes');
                        redirect();//退出后轉到首頁
                }
               
               
                if ($ok) {//如果通过
                                        $time=time();
                                        $this->users_model->login_time($username,$time);
                                        setcookie('yes',$username,$time+3600,'/');
                                        if($username=='admin'){//如果是管理员,当退出时,要将cookie和session<CI>都清除
                                                $this->session->set_userdata('admin',$username);
                                        }
                                        else{
                                                $this->session->set_userdata('common',$username);
                                        }
                                       
                                        redirect();
                                       
                                }
                               
<?php
        $logout=anchor('admin/logout','退出');
        $index=anchor('',"<span id=\'not_index\'>首頁</span>");
        $admin_string=anchor('manage','管理');
       
        $login=anchor('admin/login','登录');
        $register=anchor('admin/register','注册');
?>
 
复制代码



<script type="text/javascript">
        var a=getCookie('yes');
        if(a){
                if(a=='admin'){//如果是管理员
                        document.write('欢迎您,管理员'+a+'|<?=$logout;?>'+'|<?=$admin_string;?>'+'|<?=$index;?>');
                }
                else{//如果是普通用户
                        document.write('欢迎您,'+a+'|<?=$logout;?>'+'|<?=$index;?>');
                }
               
        }        
        else{//如果没有登录
                document.write('<?=$login;?>'+'|<?=$register;?>');
        }
</script>

本版积分规则