登录页面再次重定向到codeingniter中的登录页面

时间:2017-05-13 06:30:53

标签: php codeigniter redirect

我被困在这里将近2天。我查看了教程,但无法找到我的代码中的问题。

我的登录页面再次将我重定向到我的登录页面,不知道为什么。我认为我的重定向语法存在一些问题,我无法解决它,所以我需要你的专家帮助。

我的代码如下。

控制器文件: Verifylogin_controller.php

<?php

// if(!isset($_SESSION))
// {

session_start();

// }

class Homelogin_controller extends CI_Controller

{
    public

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        if ($this->session->userdata('logged_in'))
        {
            $session_data = $this->session->userdata('logged_In');
            $data['username'] = $session_data['username'];
            $this->load->view('Home_view', $data);
        }
        else
        {
            redirect('Login_controller', 'refresh');
        }
    }

    function logout()
    {
        $this->session->unset_userdata('logged_in');
        session_destroy();
        redirect('Homelogin_controller', 'refresh');
    }
}

?>

模型文件 Login_model.php

<?php
class Login_model extends CI_Model

{
    function login($username, $password)
    {
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $query = $this->db->get('login');
        if ($query->num_rows() > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

?>

查看文件

login_view.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Login with codeigniter</title>
</head>

<body>
<h1>Simple Login with CodeIgniter</h1>

<?php echo validation_errors(); ?>
   <?php echo form_open(base_url().'Verifylogin_controller'); ?>
     <label for="username">Username:</label>
     <input type="text" size="20" id="username" name="username"/>
    <span><?php  echo form_error ('username');       ?>                   </span>
     <br/>
     <label for="password">Password:</label>
     <input type="password" size="20" id="passowrd" name="password"/>
     <span><?php  echo form_error ('password');       ?>                   </span>

     <br/>
     <input type="submit" value="Login"/>
     http://localhost/codeIgniter/CodeIgniter-3.1.4/Verifylogin_controller/login_validation
<?php
$this->session->flashdata('error');
?>
</form>
</body>
</html>

Home_view.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Simple Login with CodeIgniter - Private Area</title>
</head>

<body>
<h1>Home</h1>
   <h2>Welcome <?php echo $this->session->userdata('username')   ?>!</h2>
   <a href="Login_controller/logout">Logout</a>
</body>
</html>

1 个答案:

答案 0 :(得分:2)

编辑:将我的原始答案移至评论中,因为它已正确指出它应该是。

你永远不会设置$ _SESSION ['logged_In']布尔值。你返回TRUE,但你实际上并没有设置任何东西。在登录控制器中,您应该在返回任何内容之前将其设置为true。这可能是您的重定向问题实际来自的地方。可能在评论中已经提到过,我无法从这个屏幕上看到它们。

这是我的方法。有一些问题,有些事情需要一些额外的解释。但这是我的代码:

$seg = $this->uri->segment(2);
if (($seg == "login") && (isset($uid)) && (ctype_digit($uid)) && (($uid != "0"))) {
    redirect(base_url());
} elseif (($seg != "login") && ((!isset($uid)) || (!ctype_digit($uid)))) {
    redirect(base_url() . 'index.php/user/login');
}
  1. 您需要测试用户是否已登录并检查他们是否已在登录页面上。就我而言,URI段2是控制器。如果他们已经登录并且他们在登录页面上,则会将其重定向到基本URL。
  2. 如果他们没有登录并且他们在除登录页面之外的任何其他页面上,则会将其重定向到登录页面。
  3. 您不需要设置$ seg变量。我这样做是因为我在其他地方使用它,我不想再次输入帮助程序代码。
  4. 我使用Stencil模板系统,这就是为什么我可以使用$ uid而不是$ _SESSION ['uid']。我修改了模板代码,将所有会话变量传递给视图页面。由于您没有使用Stencil,因此您必须确定将此代码放在何处。我在布局文件中有它,所以我不必在每个页面上检查登录。
  5. 对您的代码的评论

    1. 不要直接调用session_start()。如果要使用CI会话库,请加载会话库自动加载配置。它有一些问题,所以你可能想要寻找替代方案或自己动手。这可以防止您必须在每个页面上调用会话。

    2. 您似乎以纯文本格式存储密码,如果这是您的代码的直接粘贴。您应该散列密码(password_hash)并将其存储在数据库中。然后散列用户的输入并将其与数据库(password_verify)进行比较。

    3. 您使用$ session_data = $ this-&gt; session-&gt; userdata('logged_In')设置用户数据,然后尝试访问$ session_data ['username'],但您实际上并未存储用户名。您存储了“logged_In”bool。