ユーザーがログインしていない場合、ページからのアクセスを制限しようとしています。奇妙なことに、許可されていないユーザーがWebページにアクセスしようとすると、制限されたアクセスのページが表示されます(「許可されていない場合はログインしてください。 "メッセージと、同じページで、メンバー専用ページをロードします)。
サイト管理者の場合:
class Site extends CI_Controller {
function __construct(){
parent::__construct();
$isLogged=$this->session->userdata('logged');
if($isLogged!='logged' || !isset($isLogged)){
$data['content']='denied';
$this->load->view('include/template', $data);
}
}
function members(){
$data['content']='memberArea';
$this->load->view('include/template', $data);
}
ログインフォーム:
class Login extends CI_Controller {
function index () {
$data['content']='loginForm';
$this->load->view('include/template', $data);
}
function validateMember(){
// load the model for the login authentification
$this->load->model('loginModel');
//query should also contain the user details
$query = $this->loginModel->authenticate();
//if it returns something:
if($query){
foreach ($query as $row){
//set user data to be passed
$details=array(
'username'=>$row->user_name,
'id'=>$row->id,
'logged'=>'logged',);
}
//set session
$this->session->set_userdata($details);
redirect('site/members');
}
else{
$this->index();
}
}
ログインのモデルは次のとおりです。
class LoginModel extends CI_Model {
function authenticate(){
//select active fields
$this->db->select('id, user_name, password');
// query to select from table where conditions
$query = $this->db->get_where('login', array(
'user_name'=>$this->input->post('username'),
'password'=>$this->input->post('password'),),
1);
//if it finds something...must ask if i need to manually close the database with $this->db->close();
if($query->num_rows()==1){
foreach($query->result() as $row){
$data[]=$row;
}
return $data;
}
else {return false;}
}
}
私のテストでは、構成関数が失敗した場合でも、サイトが他の関数を呼び出し続けることが示されました。セッションにはデータが含まれています。die()またはexit()を使用すると、Webページが空白で読み込まれます。よろしくお願いします!
PS:ビュー<p>
にはそれらだけがあり、派手なものは何もありません。