如何在登录系统中使用会话并在codeigniter中实现注销

时间:2015-08-13 05:39:59

标签: php codeigniter session login logout

新的codeigniter学习它并停留在codeigniter的会话上。 我正在登录系统登录部分工作正常,但现在我必须添加会话和注销,并将我的其他页面包含在该会话中,这样我就可以限制某人直接访问该页面。所以我如何实现会话&在我的代码中注销。

这是控制器

<?php
class LoginController extends CI_controller
        {
            public function index()
        {
            $this->load->view('header2');
            $this->load->view('login');
            $this->load->view('footer');
        }
            public function checklogin()
        {
            $this->form_validation->set_rules('username' ,'Username', 'required|valid_email');
            $this->form_validation->set_rules('password' ,'Password', 'required|callback_verifyUser');

                if($this->form_validation->run() == false){
                    $this->load->view('header2');
                    $this->load->view('login');
                    $this->load->view('footer');
                    }
                    else
                    {
                        redirect('HomeController/index');
                    }
                }
                    public function verifyUser()
                    {
                        $name = $this->input->post('username');
                        $pass = $this->input->post('password');

                        $this->load->model('LoginModel');

                        if($this->LoginModel->login($name, $pass))
                        {
                            return true;
                        }
                        else
                        {
                            $this->form_validation->set_message('verifyUser','Incorrect Email or Pass');
                            return false;
                        }
                        redirect('LoginController/checklogin');
                    }
            }

模型就像这样

<?php
        class LoginModel extends CI_model
        {
            public function login($name, $pass)
            {
                $this->db->select('name,pass');
                $this->db->from('members');
                $this->db->where('name',$name);
                $this->db->where('pass',$pass);     

                $query = $this->db->get();

                if($query->num_rows() == 1)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }

视图

                  <html>
                    <head>
                    <title></title>
                </head>
                <body>
                <?php echo validation_errors(); ?>
                <?php echo form_open('LoginController/checklogin'); ?>
                UserName: 
                <input type="text" name="username" /><br/>
                password:
                <input type="text" name="password" />
                <input type="submit" value="Login" name="submit" />
                </form>
                </body>
                </html>

登录正常工作需要一个会话并在此注销。

4 个答案:

答案 0 :(得分:3)

1)首先包含 图书馆

  

$这 - &GT;负载&GT;库(&#39;会话&#39);

2) 数据 数组,您希望在会话中存储

$data= array(
                   'username'  => 'username',
                   'password'     => 'password',
                   'email'=>'emailid'
                   'logged_in' => 'login id'
               );

3)存储 数据 会话

$this->session->set_userdata($data);

您可以随时使用此数据,例如,如果您想要从会话中登录您可以写入:

$loginid= $this->session->userdata('logged_in');

退出时:

$this->session->unset_userdata(array("username"=>"","logged_in"=>"","password"=>"","email"=>""));
$this->session->sess_destroy();
redirect('loginpage');
  

如果您不想直接访问,则会创建一个模型并添加此模型   代码并自动加载该模型。

public function valid_allowed()//check user is login or not
    {
        $session = $this->session->userdata('username'); //here you can take loginid, email whatever you store in session
        if(!$session)
        {
            redirect('login');
        }
    }

自动加载 模型

转到application-&gt; config-&gt; autoload.php:此行:

$autoload['model'] = array('model name');

改变你的模特:

<?php
        class LoginModel extends CI_model
        {
            public function login($name, $pass)
            {
                $this->db->select('name,pass');
                $this->db->from('members');
                $this->db->where('name',$name);
                $this->db->where('pass',$pass);     

                $query = $this->db->get();

                if($query->num_rows() == 1)
                {
                    $row=$query->row();
                    $data=array(
                    'username'=>$row->u_username,
                    'id'=>$row->id,
                    'email'=>$row->email
                    'password'=>$row->u_password);
                    $this->session->set_userdata($data);
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }

更改您的verifyUser功能:

 public function verifyUser()
                        {
                            $name = $this->input->post('username');
                            $pass = $this->input->post('password');

                            $this->load->model('LoginModel');
                            $result=$this->LoginModel->login($name, $pass))
                         if(!$result)                   
                         {

             $this->form_validation->set_message('verifyUser','Incorrect Email or Pass');
                                return false;
                     redirect('LoginController/checklogin');

                        }
                        else
                        {   
                           redirect('dashboard');   //user is valid so goto dashboard
                        }
}

答案 1 :(得分:1)

登录成功后,在此会话中设置用户ID

$this->session->set_userdata("id",$variable);

这可以在任何地方完成,但对于你来说,在模型中做到了

if($query->num_rows() == 1)
{         
    // set session here and then return true.
    return true;
}
else
{
    return false;
 } 

所以当您想要检查会话是否存在时,请执行以下操作

if(!$this->session->userdata("id")){
    // redirect the user to login page
}

在您需要登录的所有控制器的构造函数中编写上述代码。确保你不要在登录控制器中检查会话数据。

答案 2 :(得分:1)

请参阅在CI中使用会话的简单过程

  

包含此库以执行会话或其他会话无法正常工作

  $this->load->library('session');
  

要在会话中保存数据,您需要创建数据数组,然后使用set_userdata()保存会话数据

 $newdata = array(
                   'username'  => 'example_user',
                   'email'     => 'someone@some-site.com',
                   'logged_in' => 1
               );

$this->session->set_userdata($newdata);

会话中有多个内容你应该记住

  

参见参考herehere

答案 3 :(得分:0)

如果仍然遇到此错误,只需在以下位置更新您的会话文件:

  

系统/库/Session/Session.php

具有最新的在线文件。