我已经使用codeigniter开发了一个登录名,但是当我在任何一个人可以在另一个地址中键入另一个地址并转到另一个帐户时,我遇到了这个问题。怎么避免呢?请指导我?
这就是我对登录进行编码的方式:
function index()
{
$this->is_logged_in();
}
function is_logged_in(){
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in)||$is_logged_in!= TRUE ){
echo 'you are not logged in ';
echo anchor('login_controller','Login');
}else{
$this->main();
}
}
答案 0 :(得分:2)
我在CI中使用了两种用户身份验证的方法
您可以通过__construct()
功能逐页完成,检查用户是否已登录,然后相应地重定向。
或者您可以扩展基本控制器,以便您(例如)具有常规控制器,不需要身份验证的页面,需要您登录的“公共”控制器以及允许的“管理”控制器只有某些类型的用户。
我再次提到Phil Sturgeon - extending base controllers
我还建议查看一些Auth Libraries - Ion Auth和Tank Auth通常被认为非常好 - 但是有很多可用的。
您的功能也相当有限 - 用户只能做一个选项(主要)。
更好的方法是
<?php
class Foo extends Controller {
function __construct()
{
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in)||$is_logged_in!= TRUE )
{
redirect('login');
}
}
// else, logged in..proceed
}
例如。
答案 1 :(得分:1)
您必须在用户登录后创建会话,例如指定正确的凭据。完成后,您必须对每个只需登录用户才能查看的页面进行会话检查。
查看CI的Session Class了解更多信息。
答案 2 :(得分:1)
你说:
我遇到这个问题时,任何人都可以在另一个地址输入另一个地址并转到另一个帐户
据我了解,当您验证用户的凭据时,您不会在会话中存储该用户的ID。
您需要在每个会话中存储ID,以了解谁正在查看每个页面以及您需要向他展示的内容。
控制器示例:
function validate_credentials() {
$this->load->model('users_model');
if($this->users_model->check_pass() == true) {
$data = array(
'email' => $this->input->post('email'),
'is_logged_in' => true,
'user_id' => $this->users_model->get_userid()
);
$this->session->set_userdata($data);
}
}
模型示例:
function get_userid() {
$this->db->where('email', $this->input->post('email'));
$q = $this->db->get('users');
$r = $q->row();
return $r->id;
}
现在,您可以根据$ this-&gt; session-&gt; userdata('user_id')动态加载内容;并确定他们应该在每一页上看到什么。
PS:如果你想拥有角色,你只需要在会话中存储用户角色,添加另一个'key'=&gt; 'VAL'
希望有所帮助。
答案 3 :(得分:0)
//model
function fetchrowlogin($info,$table){
$this->db->select('*');
$this->db->where($info);
$this->db->from($table);
$query = $this->db->get();
if($query->num_rows() > 0){
$row = $query->row_array();
return $row;
}
}
///controller
function login(){
if(isset($_POST['login'])){
$log['email'] = $_POST['email'];
$log['password'] = $_POST['password'];
$details = $this->User_model->fetchrowlogin($log,'candidate');
if(count($details)){
$ids = $details['id'];
$email = $details['email'];
$fname = $details['fname'];
$this->session->set_userdata(array(
'custid' => $ids,
'emailid'=> $email,
'fname'=> $fname,
));
redirect('http://localhost/test27/index.php/welcome/dashboard');
}else{
redirect(base_url().'front1');
}
}
$this->load->view('front/login');
}