如何在登录系统中使用会话并在codeigniter中实现注销
Posted
技术标签:
【中文标题】如何在登录系统中使用会话并在codeigniter中实现注销【英文标题】:how to use session in login system and implement logout in codeigniter 【发布时间】:2015-11-05 22:49:09 【问题描述】: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>
登录正常工作需要一个会话并在此注销。
【问题讨论】:
@Deep Parekh 先生,如果您不忙,需要这方面的指导...... How to save and extract session data in codeigniter 的可能重复项 @Meenesh Jain 先生,我尝试了在线示例,但无法理解会话系统我的登录系统运行良好,只想在其上添加一个会话并在此注销。 查看答案和参考链接 在上面的代码中使用该代码集成两个代码 【参考方案1】:1) 首先包含 库:
$this->load->library('session');
2) Store data 在 array 中您要存储在 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');
如果您不想直接访问页面,请创建一个模型并添加此 代码并自动加载该模型。
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->config->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
【讨论】:
先生,我不知道我将这些数据放在我的示例中的什么位置,所以,您能帮我解决这个问题吗...先生... 查看我编辑的代码“更改您的模型”根据您的数据更改数据名称 如果登录完成,然后尝试打印一些会话数据,如用户名或任何要验证的内容.... 如何打印...我的意思是在仪表板上打印它或 echo $username,, echo $id like that sir..? 阅读我已经告诉过的答案。 $username= $this->session->userdata('username');回声$用户名;退出;【参考方案2】:一旦登录成功,像这样在会话中设置用户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
在您需要登录的所有控制器的构造函数中编写上述代码。确保你不在登录控制器中检查会话数据。
【讨论】:
谢谢你的回答,但你能帮我把这段代码放在我的代码上吗? 我在上面提到过。将其保存在您检查 num_rows() 的模型中 我无法进入 throw login 重定向的东西可能正在工作,但我现在无法登录....跨度> 这样 if($query->num_rows() == 1) $query = $query->row(); $this->session->set_userdata("id",$query->id);返回真; 否则 返回错误; 同样的问题先生...无法使用正确的数据登录。【参考方案3】:请参阅在 CI 中使用 session 的简单过程
包含此库以执行会话,否则会话将无法工作
$this->load->library('session');
要在会话中保存数据,您需要创建一个数据数组,然后使用
set_userdata()
来保存会话数据
$newdata = array(
'username' => 'example_user',
'email' => 'someone@some-site.com',
'logged_in' => 1
);
$this->session->set_userdata($newdata);
在会话中有很多事情你应该记住
请参阅参考资料 here 和 here
【讨论】:
【参考方案4】:如果您不断遇到此错误,只需更新您的会话文件:
系统/库/Session/Session.php
使用最新的在线文件。
【讨论】:
以上是关于如何在登录系统中使用会话并在codeigniter中实现注销的主要内容,如果未能解决你的问题,请参考以下文章