我正在使用Sessions和Login创建一个简单的Codeigniter应用程序(我对Codeigniter非常新,所以出于这个原因,我的问题对于专家来说可能很容易)。一切正常,我使用用户名和密码登录,然后进入我的私人区域。但是,如果我在登录时复制Url(http://x.x.x.x/lab/index.php/admin/dashboard
)并在我登录时粘贴,我可以看到所有内容,我的意思是所有包含内容的表。我只是得到了这些错误:
这是我的登录视图:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OpediaLab</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('Verifylogin'); ?>
<div class="container">
<div class="inputs">
<label for="username">Username:</label>
<input class ="" type="text" size="20" id="username" placeholder="Il tuo nome utente" name="username"/>
<input class="btn btn-info" type="submit" value="Login" style="margin-left:100px;"/>
<br>
<label for="password">Password:</label>
<input class ="" type="password" size="20" id="passowrd" placeholder="La tua password" name="password" />
</div>
</div>
</form>
</body>
</html>
这是Verifylogin控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class VerifyLogin extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->model('user','',TRUE);
$this->load->helper('url');
}
function index()
{
//This method will have the credentials validation
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'trim|required');
$this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database');
if($this->form_validation->run() == FALSE)
{
//Field validation failed. User redirected to login page
$this->load->view('login_view');
}
else
{
// session data
$username = $this->session->userdata('username');
//Pass it in an array to your view like
$data['username']=$username;
// $this->load->view('home_view',$data);
$this->load->view('home_view', $data);
redirect(site_url('admin/dashboard'), '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:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function index()
{
if ( ! $this->session->userdata('logged_in')){
$tutti_libri = $this->libri->get_all();
$tutte_guide = $this->guide->get_all();
$tutti_video = $this->video->get_all();
$tutte_animazioni = $this->animazioni->get_all();
$tutte_registrazioni = $this->registrazioni->get_all();
/*$this->load->view('home_view', );*/
$this->load->vars( array(
'libri' => $tutti_libri,
'guide' => $tutte_guide,
'video' => $tutti_video,
'animazioni' => $tutte_animazioni,
'registrazioni' => $tutte_registrazioni
) );
//$this->load->view( 'back/header.php' );
$this->load->view( 'login_view.php' );
//$this->load->view( 'back/header.php' );
}
else
{
echo "sessione non attiva";
}
}
public function login()
{
if ( ! $this->session->userdata('logged_in')){
$tutti_libri = $this->libri->get_all();
$tutte_guide = $this->guide->get_all();
$tutti_video = $this->video->get_all();
$tutte_animazioni = $this->animazioni->get_all();
$tutte_registrazioni = $this->registrazioni->get_all();
/*$this->load->view('home_view', );*/
$this->load->vars( array(
'libri' => $tutti_libri,
'guide' => $tutte_guide,
'video' => $tutti_video,
'animazioni' => $tutte_animazioni,
'registrazioni' => $tutte_registrazioni
) );
//$this->load->view( 'back/header.php' );
$this->load->view( 'login_view.php' );
//$this->load->view( 'back/header.php' );
}
else
{
echo "sessione non attiva";
}
}
function logout()
{
$this->session->unset_userdata('logged_in');
session_destroy();
redirect(site_url(''), 'refresh');
}
}
所以,我想要制作的内容非常简单,如果我知道我应该在login_view页面中重定向(或保留)Url。我怎么能这样做?
答案 0 :(得分:0)
我检查了您的代码并且我找不到具体的错误,但我与您分享了我的方法(可行),用于登录/注销和访问管理区域:
class Login extends CI_Controller {
function index(){
if ($this->session->userdata('logged_in') == TRUE){
redirect('admin');
}else{
$this->session->sess_destroy();
$data = array('title'=> 'Login', 'main_content'=>'login' );
$this->load->view('login',$data);
}
}
public function submit(){
if(empty($_POST['username']) || empty($_POST['password'])){
$this->load->view('login',$data);
}
$this->load->model("user");
$user = $this->user->login($_POST['username'],$_POST['password']);
if($user != false){
$data = array( 'username' => $_POST['username'], 'logged_in' => TRUE, 'user'=>$user[0]);
$this->session->set_userdata($data);
redirect(base_url('admin'));
}else{
...
}
}
public function logout(){
$this->session->sess_destroy();
header("Location: ".base_url());
}
在管理区:
class Admin extends CI_Controller {
function __construct(){
parent::__construct();
$this->load->library('session');
if(! $this->session->userdata('logged_in')){
redirect('login');
}
我希望它有所帮助!