首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用codeigniter登录

使用codeigniter登录
EN

Stack Overflow用户
提问于 2010-11-10 15:47:22
回答 4查看 601关注 0票数 0

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

这是我对登录进行编码的方式:

代码语言:javascript
复制
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();      
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-10 17:59:57

我在CI中使用了两种用户身份验证方法

您可以通过__construct()函数按页执行此操作,检查用户是否已登录,然后相应地对其进行重定向。

或者,您可以扩展基本控制器,以便(例如)拥有一个常规控制器,用于不需要身份验证的页面,一个“公共”控制器,它要求您登录,以及一个“管理”控制器,它只允许特定类型的用户。

我再一次向Phil Sturgeon提及这一点- extending base controllers

我也推荐你看看一些Auth库-- Ion AuthTank Auth被普遍认为是非常好的--但也有很多可用的。

你的功能也是相当有限的--用户只能做一个选项(main)。

更好的方法是

代码语言:javascript
复制
<?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
}

例如。

票数 2
EN

Stack Overflow用户

发布于 2010-11-10 15:52:04

你必须在用户登录后创建一个会话,例如指定正确的凭据。一旦你这样做了,你将不得不在每个页面上进行会话检查,这些页面只需要由登录的用户查看。

有关更多信息,请查看CI的Session Class

票数 1
EN

Stack Overflow用户

发布于 2010-11-11 18:23:17

你说过:

我在登录时遇到此问题,任何人都可以在另一个地址中键入另一个地址,然后转到另一个帐户

据我所知,当您验证用户的凭据时,您不会在您的会话中存储该用户的ID。

您需要在每个会话中存储ID,以便知道谁正在查看每个页面以及您需要向他显示什么。

控制器示例:

代码语言:javascript
复制
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);
    }
}

模型示例:

代码语言:javascript
复制
function get_userid() {
    $this->db->where('email', $this->input->post('email'));
    $q = $this->db->get('users');
    $r = $q->row();
    return $r->id;
}

现在,您可以基于$this->session->userdata(‘user_id’)动态加载内容,并确定他们应该在每个页面上看到什么。

PS:如果你想拥有角色,你只需要在你的会话中存储用户角色,添加另一个'key‘=> 'val’

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4142246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档