个人资料页还是移动到登录页面,如果我的网址改为即使已经登录
问题描述:
我有一个问题,我已经登录页面登录,就会直接到配置文件,如果我们输入了正确的电子邮件&密码,但问题是,当我改变的URL登录,它仍然移动到登录页面,我怎么能阻止登录页面如果我已经登录,这样会dirrect到配置文件尽管该网址我改变它的登录页面仍然直接到配置文件页面。个人资料页还是移动到登录页面,如果我的网址改为即使已经登录
下面是代码:
class Profile extends CI_Controller {
public function index()
{
if($this->session->userdata('logged_in')){
$session_data = $this->session->userdata('logged_in');
$data['email'] = $session_data['email'];
$this->load->view('view_profile', $data);
}else{
redirect('login','refresh');
}
}
public function logout(){
$this->session->unset_userdata('logged_in');
$this->session->sess_destroy();
redirect(site_url('home'),'refresh');
}
}
这是用户数据( 'LOGGED_IN')
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Home extends CI_Controller {
public function index()
{
$this->form_validation->set_rules('email','Email','trim|required');
$this->form_validation->set_rules('password','Password','trim|required|callback_basisdata_cek');
if($this->form_validation->run()==false){
$this->load->view('view_home');
}else{
redirect(base_url('index.php/profile'),'refresh');
}
}
function basisdata_cek($password){
$email = $this->input->post('email');
$result = $this->login->login($email,$password);
if($result){
$sess_array = array();
foreach($result as $row){
$sess_array = $arrayName = array('email'=>$row->email, 'password'=>$row->password);
$this->session->set_userdata('logged_in',$sess_array);
}
return true;
}else{
$this->session->set_flashdata('basisdata_cek', 'Invalid email or password');
redirect(base_url('index.php/login'),'refresh');
return false;
}
}
}
答
BEST PRACT冰
总是创建用户/登录控制器单独,你将有更多的空间来创建功能,如用户角色检查和重定向到他们的角色特定仪表板/配置文件。
请登录/注销校验功能在父控制器和从控制器扩展控制器。例如,创建一个名为My_Controller的控制器,并在其中放置您的isLoggedin检查和注销功能。
class My_Controller extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function isLoggedIn()
{
if(!empty($this->session->userdata['id'])&& $this->session->userdata['type']=='admin')
{
return true;
}
else
{
return false;
}
}
public function logout()
{
$this->session->sess_destroy();
redirect(base_url());
}
}
然后创建用户或登录控制器来呈现登录页面并执行登录功能
class Login extends My_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('user_model');
$this->load->library("security");
}
public function index()
{
if(!$this->isLoggedin()) // if the user is not logged in render login screen
{
if($_POST) // or if($this->input->post)
{
$data=$this->security->xss_clean($_POST);
$user=$this->user_model->checkUser($data);
if(!empty($user))
{
$this->session->set_userdata($user);
redirect(base_url().'profile');
}
else
{
$data['errors']='Wrong Credentials';
$this->load->view('login',$data);
}
}
else
{
$this->load->view('login');
}
}
else // but if the user is logged in , take him to profile.
{
redirect(base_url().'profile');
}
}
和简介控制器
class Profile extends My_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('user_model');
}
public function index()
{
// if user is not logged in , redirect him back to login screen.
if(!$this->isLoggedin()){ redirect(base_url().'login');}
$userId=$this->session->userdata['id']; // this index depends on the field name
$data['user']=$this->user_model->getUserDataById($userId);
$this->load->view('profile',$data);
}
}
什么是$这个 - >值session-> userdata('logged_in')? –
@AdhanTimothyYounes有我在编辑的代码,我把值$这 - >会话级>用户数据(“LOGGED_IN”) – Firm
可能也许你正在破坏在登录类第一手会议.... –