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

[HELP] 利用session做登陆和退出功能出现的错误

[复制链接]
发表于 2010-11-16 16:06:05 | 显示全部楼层 |阅读模式
我在写后台管理员登陆时,用到了CI当中的session类。
我使用的登陆逻辑是这样的:
当管理员登陆成功后,把管理员的信息存放在session当中,然后利用session里的信息对后台进行操作。当会员退出时,注销所有的session变量。
登陆时的代码如下
PHP复制代码
 
function login(){
if($_SERVER['REQUEST_METHOD']=='POST')
{
      $user_name=$this->input->post('user_name');
      $password=$this->input->post('password');
      $query=$this->db->get_where($pre_fix.'admin',array('user_name'=>$user_name,'password'=>$password));
      if($query->num_rows==1)
      {
            $tmp=$query->result_array();
            session_start();//开始注册session
            $info['id]=$tmp[0]['id];
            $info['user_name']=$tmp[0]['user_name'];
            $info['nick_name']=$tmp[0]['nick_name'];
            $info['logins']=$tmp[0]['logins'];
            $this->session->set_userdata('admin_info',$info);
            return true;
      }
      else
      {
              return false;    
      }
 
}}
 
复制代码

退出的代码如下
PHP复制代码
 
function loginout(){
      $this->sessioon->sess_destroy();//注销所有session变量
      redirect('admin/login','refresh');//这是退出到登陆页面
}
 
复制代码

以上是我所写的登陆和退出的方法。我程序所出现的总是每当我在后台进行操作后,跳转到其他网站的页面进行操作后再回到这个后台进行任何一个操作都会跳转到登陆页面。这里我所写的代码只是简写的部分代码,我程序中的代码不存在着错误,如果这里的代码有错误,那只是敲入时敲错了。我在网上也查找了相关的信息,别人都说是session里所设置的时间太短了。但是假便我session里的时间设置了四个小时,也会操作十几分钟后就会跳转到登陆页面。我也不知道这是为什么?望高手给点提示或给点解决办法!谢谢了。
这里是我config.php中session的配置代码:
PHP复制代码
 
$config['sess_cookie_name'] = 'session';
$config['sess_expiration'] = 0;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ker_sessions';
$config['sess_time_to_update'] = 30*60*60;
$config['sess_lifetime'] = 30*60*60;
$config['sess_match_ip'] = TRUE;
 
复制代码

不知道我所描述的问题说明白了没有?在线等待高手解决!菜鸟不甚感激!!!如有不明白,我再给你描述。
发表于 2010-11-17 16:55:39 | 显示全部楼层
ci的session类就是封装了的cookie。。。。所以不需要注册session,不过这应该不是原因
其实我的项目也有你这个原因。。。就是10几分钟没有操作后,session会自动注销掉
发表于 2010-11-18 08:33:05 | 显示全部楼层
请用ci原生session扩展,论坛搜索有
发表于 2010-11-19 17:58:43 | 显示全部楼层
楼上能给出链接吗?
发表于 2010-11-19 18:36:37 | 显示全部楼层
你使用session_start()打开session了吗
使用原生的session无论是设置还是注销session都是要用到这个函数的
 楼主| 发表于 2010-11-20 09:37:57 | 显示全部楼层
问题已经解决了。是因为我退出时设置的是注销所有的session变量,那样的话,我在同一浏览器中的不同窗口中同时登陆了前台会员和后台管理员帐号的话,无论退出哪个,所有的session都会注销。这样肯定会退出了。
发表于 2010-11-20 11:12:30 | 显示全部楼层
用CI内置的SESSION类不需要session_start();
只要在AUTOLOAD里面打开SESSION就可以了
发表于 2011-7-5 18:02:45 | 显示全部楼层
用这个:$this->session->unset('');

本版积分规则