CodeIgniter session login
Ich bin neu in CodeIgniter und ich habe versucht, erstellen Sie ein login system auf meiner website. Wenn ich versuche, geben Sie auf der Seite Übersicht, schickt er mich auf die login-Seite, aber nachdem ich meine korrekte E-Mail und Passwort passiert nichts.
Login.php - controller
<?php if ( ! defined('BASEPATH')) exit('No direct script access
allowed');
class Login extends CI_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->helper(array('form'));
$this->load->view('login');
}
}
?>
Overview.php - controller
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Overview extends CI_Controller {
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('overview', $data);
}
else
{
//If no session, redirect to login page
redirect('login', 'refresh');
}
}
function logout()
{
$this->session->unset_userdata('logged_in');
session_destroy();
redirect('home', 'refresh');
}
}
?>
VerifyLogin.php - controller
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class VerifyLogin extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->model('user','',TRUE);
}
function index()
{
//This method will have the credentials validation
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'E-mail', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');
if($this->form_validation->run() == FALSE)
{
//Field validation failed. User redirected to login page
$this->load->view('login');
}
else
{
//Go to private area
redirect('home', 'refresh');
}
}
function check_database($password)
{
//Field validation succeeded. Validate against database
$username = $this->input->post('username');
//query the database
$result = $this->user->login($username, $password);
if($result)
{
$sess_array = array();
foreach($result as $row)
{
$sess_array = array(
'id' => $row->id,
'username' => $row->username
);
$this->session->set_userdata('logged_in', $sess_array);
}
return TRUE;
}
else
{
$this->form_validation->set_message('check_database', 'Invalid username or password');
return false;
}
}
}
?>
Login.php - Ansichten
<div class="container">
<div class="row">
<div class="col-md-4 col-md-offset-4 well">
<form role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform">
<fieldset>
<legend>Login</legend>
<div class="form-group">
<label for="name">Email</label>
<input type="text" name="email" placeholder="Your Email" required class="form-control" />
</div>
<div class="form-group">
<label for="name">Password</label>
<input type="password" name="password" placeholder="Your Password" required class="form-control" />
</div>
<div class="form-group">
<input type="submit" name="login" value="Login" class="btn btn-primary" />
</div>
</fieldset>
</form>
<span class="text-danger"><?php if (isset($errormsg)) { echo $errormsg; } ?></span>
</div>
</div>
Dank und ich hoffe, dass somene geben Sie mir eine Lösung.
- Weil dein link in form hält posting zu
index()
Methode inLogin
controller, die nur zeigt login-Formular. Link posten darf zuVerifyLogin
controller. - Ihr controller VerifyLogin.php sollte nur der erste Buchstabe groß Verifylogin.php und
class Verifylogin extends CI_Controller {
- Ich habe es geändert und es tut die gleiche Sache..
- Ich verstehen nicht wirklich, was ich ändern muss.. tut mir Leid, vielleicht können Sie mir sagen. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie geben Sie die login-Seite der Aktion "Login.php" weil
$_SERVER['PHP_SELF']
.Müssen Sie die Aktion ändern, die auf
VerifyLogin
, so dass, wenn Sie ein Formular Einreichen, dieindex()
Methode inVerifylogin.php
ausgeführt wird.xss_clean
ist nicht mehr ein Teil der Formular-Validierung, so entfernen Sie es. XSS Reinigung sollte verwendet werden, die auf output nicht input.redirect('home', 'refresh');
zuredirect('overview', 'refresh');
überall dort, wo Sie umleiten zu der Seite Übersicht.logged_in
array vorhanden ist in der session?$autoload['libraries']
array.var_dump($result); die();
imcheck_database()
Methode, um zu sehen, wenn die Abfrage richtig funktioniert.xss_clean
von Validierungsregeln, weil die Funktion ist nicht mehr ein Teil der Formular-Validierung. Entfernen Sie das und es wird funktionieren.