我被困在这里将近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>
答案 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');
}
对您的代码的评论
不要直接调用session_start()。如果要使用CI会话库,请加载会话库自动加载配置。它有一些问题,所以你可能想要寻找替代方案或自己动手。这可以防止您必须在每个页面上调用会话。
您似乎以纯文本格式存储密码,如果这是您的代码的直接粘贴。您应该散列密码(password_hash)并将其存储在数据库中。然后散列用户的输入并将其与数据库(password_verify)进行比较。
您使用$ session_data = $ this-&gt; session-&gt; userdata('logged_In')设置用户数据,然后尝试访问$ session_data ['username'],但您实际上并未存储用户名。您存储了“logged_In”bool。