急: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吗?
非常迷惑,感谢大家帮助!! CI 的 Session 类库就是在 cookie 中存储的,前提条件是你没打开数据库存储。
如果打开数据库存储,并建立相应的表,那在 cookie 中只有一个 session id,数据都在数据库中。
PHPSESSID 就是你的 session id,PHP 就是根据这个识别你是不是同一个人的,这是 PHP 基础知识和 CI 无关。 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: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()则可以得到)。 这个么办法了,我的session是自己写的类,没用CI_Session
自己写的session类把session和cookie统一了,单管线操作用户数据 关于这个问题,CI 的 Session 不一定就是按照你设置的 name 作为 cookie 的 name,具体你还是要参考其源代码才能了解细节,否则只能是很肤浅的。 放session的cookie不是存在服务器端的么?在客户端上没道理能查的到吧,
不然不是太不安全了~~~~~~~ 放session的cookie不是存在服务器端的么?在客户端上没道理能查的到吧,
不然不是太不安全了~~~~~~~
BillyFan 发表于 2009-4-2 23:58 http://codeigniter.org.cn/forums/images/common/back.gif
我囧,cookie是保存在客户端的电脑 其实,这个问题我解决了。
用到了三种技术同时处理cookie:php<setcookie>,Javascript<document.cookie>,CI<delete_cookie>。
搞了很长时间,基本没有吃晚饭。
哪天把代码发上来吧。
我要重新复习一下PHP,JS,CSS等相关知识一下了,感觉淡忘了很多。 本帖最后由 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]