hahacc 发表于 2009-3-31 10:17:49

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

本帖最后由 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吗?
非常迷惑,感谢大家帮助!!

Hex 发表于 2009-3-31 11:14:49

CI 的 Session 类库就是在 cookie 中存储的,前提条件是你没打开数据库存储。
如果打开数据库存储,并建立相应的表,那在 cookie 中只有一个 session id,数据都在数据库中。

PHPSESSID 就是你的 session id,PHP 就是根据这个识别你是不是同一个人的,这是 PHP 基础知识和 CI 无关。

hahacc 发表于 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的值啊。

hahacc 发表于 2009-3-31 18:21:47

本帖最后由 hahacc 于 2009-3-31 18:23 编辑

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


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




就是这个cookie在什么地方,为什么用JavaScript的方法得不到数据呢?(而用$this->session->userdata()则可以得到)。

visvoy 发表于 2009-4-1 09:07:57

这个么办法了,我的session是自己写的类,没用CI_Session
自己写的session类把session和cookie统一了,单管线操作用户数据

Hex 发表于 2009-4-2 12:37:20

关于这个问题,CI 的 Session 不一定就是按照你设置的 name 作为 cookie 的 name,具体你还是要参考其源代码才能了解细节,否则只能是很肤浅的。

BillyFan 发表于 2009-4-2 23:58:55

放session的cookie不是存在服务器端的么?在客户端上没道理能查的到吧,
不然不是太不安全了~~~~~~~

visvoy 发表于 2009-4-3 12:42:27

放session的cookie不是存在服务器端的么?在客户端上没道理能查的到吧,
不然不是太不安全了~~~~~~~
BillyFan 发表于 2009-4-2 23:58 http://codeigniter.org.cn/forums/images/common/back.gif
我囧,cookie是保存在客户端的电脑

hahacc 发表于 2009-4-5 12:22:34

其实,这个问题我解决了。
用到了三种技术同时处理cookie:php<setcookie>,Javascript<document.cookie>,CI<delete_cookie>。
搞了很长时间,基本没有吃晚饭。
哪天把代码发上来吧。
我要重新复习一下PHP,JS,CSS等相关知识一下了,感觉淡忘了很多。

hahacc 发表于 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>>

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>
页: [1]
查看完整版本: 急:CI Session生成后,Cookie放在什么地方