2010-11-10 126 views
0

我已经开发了一个使用codeigniter登录,但我有任何一个可以在另一个地址键入另一个地址并转到另一个帐户时遇到此问题。如何避免这种情况?请教我?登录使用codeigniter

regrards, Rangana

+0

您的编码方法可能存在问题。您应该限制访问实际登录的用户。向我们展示一些代码。 – 2010-11-10 07:55:27

+0

我已经提供了下面的代码... – 2010-11-10 08:17:37

回答

2

我已经在CI与用户身份验证两种方法的工作方式

你能做到在每个页面的基础上,通过__construct()函数,检查用户是否已登录,然后相应地重定向它们。

或者您可以扩展基本控制器,以便您拥有(例如)常规控制器,不需要身份验证的页面,需要您登录的“公共”控制器以及“Admin”控制器只允许某些类型的用户。

我再次提到菲尔鲟鱼这个 - extending base controllers

我也建议寻找一些验证库 - Ion AuthTank 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 
} 

例如。

+0

非常感谢你的详细的答案和建议...我会通过他们! – 2010-11-15 10:59:19

1

您将有用户获取例如指定正确的凭据登录后创建一个会话。完成之后,您必须对每个只需登录用户查看的页面进行会话检查。

查看CI的Session Class了解更多信息。

+0

但我在编码中使用了会话类?这里是你的帖子下面的代码,有什么不对吗? :( – 2010-11-10 08:18:31

+0

@rangana:您的代码似乎很好,但请确保在登录用户时,为'$ this-> session-> userdata('is_logged_in')'设置会话。 – Sarfraz 2010-11-10 08:23:24

0
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

请勿发布更多信息作为答案,只需将其添加到您原来的问题,请 – Matthew 2010-11-10 14:10:11

+0

好吧,我会这样做...! – 2010-11-15 10:58:30

1

你说:

中的任何一个loged可以在另一个地址输入另一个地址,然后转到另一个帐户

据我了解,当您验证的证书时,我有这个问题您没有在会话中存储该用户的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; 
} 

现在可以动态地加载基于$内容这 - >会话级>用户数据( 'USER_ID') ;并确定他们应该在每一页上看到什么。

PS:如果你想有角色,你只需要存储在会话中增加一个“钥匙” =>“VAL”

希望帮助用户角色。

+0

谢谢很详细的解释,也是有帮助的! – 2010-11-15 11:00:10