如何在登录系统中使用会话并在codeigniter中实现注销
how to use session in login system and implement logout in codeigniter
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>
登录正常,需要在此会话和注销。
登录成功后,像这样在session中设置用户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
}
将以上代码写在所有需要登录的控制器的构造函数中。确保你不检查登录控制器中的会话数据。
在 CI 中查看使用会话的简单过程是
include this library to perform session or else session wont work
$this->load->library('session');
to save data in session you need to create a array of data and then use set_userdata()
to save session data
$newdata = array(
'username' => 'example_user',
'email' => 'someone@some-site.com',
'logged_in' => 1
);
$this->session->set_userdata($newdata);
会话中有很多你应该记住的东西
1) 首先 Include Library:
$this->load->library('session');
2) Store data in array which you want to store in session :
$data= array(
'username' => 'username',
'password' => 'password',
'email'=>'emailid'
'logged_in' => 'login id'
);
3) 在会话中存储这个数据:
$this->session->set_userdata($data);
您可以随时使用此数据,例如,如果您想要会话中的登录 ID,您可以这样写:
$loginid= $this->session->userdata('logged_in');
登出时:
$this->session->unset_userdata(array("username"=>"","logged_in"=>"","password"=>"","email"=>""));
$this->session->sess_destroy();
redirect('loginpage');
If you don't want to direct access the pages create one model and add this
code in it and auto load that model.
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');
}
}
自动加载 模型
转到应用程序->配置->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
}
}
如果您不断遇到此错误,只需更新您的会话文件:
System/libraries/Session/Session.php
使用最新的在线文件。
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>
登录正常,需要在此会话和注销。
登录成功后,像这样在session中设置用户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
}
将以上代码写在所有需要登录的控制器的构造函数中。确保你不检查登录控制器中的会话数据。
在 CI 中查看使用会话的简单过程是
include this library to perform session or else session wont work
$this->load->library('session');
to save data in session you need to create a array of data and then use
set_userdata()
to save session data
$newdata = array(
'username' => 'example_user',
'email' => 'someone@some-site.com',
'logged_in' => 1
);
$this->session->set_userdata($newdata);
会话中有很多你应该记住的东西
1) 首先 Include Library:
$this->load->library('session');
2) Store data in array which you want to store in session :
$data= array(
'username' => 'username',
'password' => 'password',
'email'=>'emailid'
'logged_in' => 'login id'
);
3) 在会话中存储这个数据:
$this->session->set_userdata($data);
您可以随时使用此数据,例如,如果您想要会话中的登录 ID,您可以这样写:
$loginid= $this->session->userdata('logged_in');
登出时:
$this->session->unset_userdata(array("username"=>"","logged_in"=>"","password"=>"","email"=>""));
$this->session->sess_destroy();
redirect('loginpage');
If you don't want to direct access the pages create one model and add this code in it and auto load that model.
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');
}
}
自动加载 模型
转到应用程序->配置->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
}
}
如果您不断遇到此错误,只需更新您的会话文件:
System/libraries/Session/Session.php
使用最新的在线文件。