Php Codeigniter中的登录会话问题
我创建了具有多级功能的登录表单,多级代码正在运行,但我在会话中遇到了问题,当我以管理员身份登录到我的帐户并直接登录到管理员仪表板时,但我仍然可以使用返回页直接再次登录页面,所以我错过了什么 我的登录控制器:Php Codeigniter中的登录会话问题,php,html,codeigniter,web,codeigniter-3,Php,Html,Codeigniter,Web,Codeigniter 3,我创建了具有多级功能的登录表单,多级代码正在运行,但我在会话中遇到了问题,当我以管理员身份登录到我的帐户并直接登录到管理员仪表板时,但我仍然可以使用返回页直接再次登录页面,所以我错过了什么 我的登录控制器: <?php defined('BASEPATH') or exit('No direct script access allowed'); class Login extends CI_Controller { function __construct() {
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Login extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('login_model');
$this->load->library('session');
$this->load->helper('url');
// $this->load->library('form_validation');
}
function index()
{
$datatitle['title'] = 'Login LPPM UTY';
$this->load->view('auth/tamplate/auth_header', $datatitle);
$this->load->view('auth/login_v');
$this->load->view('auth/tamplate/auth_footer');
}
function auth()
{
$username = htmlspecialchars($this->input->post('username', TRUE), ENT_QUOTES);
$password = htmlspecialchars($this->input->post('password', TRUE), ENT_QUOTES);
$cek_admin = $this->login_model->auth_admin($username,$password);
if ($cek_admin->num_rows() > 0) { //jika login sebagai admin
$data = $cek_admin->row_array();
$this->session->set_userdata('masuk', TRUE);
if ($data['level'] == '1')
{ //Akses admin
$this->session->set_userdata('akses', '1');
$this->session->set_userdata('user', $data['username']);
$this->session->set_userdata('name', $data['name']);
redirect('admin');
} else { // jika username dan password tidak ditemukan atau salah
$url = base_url();
echo $this->session->set_flashdata('notif', '<div class="alert
alert-danger" role="alert">Username Atau Password Salah
</div>');
redirect($url);
}
} else { //jika login sebagai dosen
$cek_dosen = $this->login_model->auth_dosen($username, $password);
if ($cek_dosen->num_rows() > 0) {
$data = $cek_dosen->row_array();
$this->session->set_userdata('masuk', TRUE);
($data['level'] == '2');
$this->session->set_userdata('akses', '2');
$this->session->set_userdata('user', $data['username']);
$this->session->set_userdata('name', $data['name']);
redirect('dosen');
} else { // jika username dan password tidak ditemukan atau salah
$url = base_url();
echo $this->session->set_flashdata('notif', '<div class="alert
alert-danger" role="alert">Username Atau Password Salah
</div>');
redirect($url);
}
}
}
function logout(){
$this->session->sess_destroy();
redirect('login');
}
}
<?php
class Admin extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->library('session');
$this->load->model('m_admin');
if ($this->session->userdata('masuk') != TRUE) {
$this->load->helper('url');
redirect('login');
}
}
function index()
{
if($this->session->userdata('akses') =='1'){
$datatitle['title'] = 'Beranda Admin';
$this->load->view("dashboard/admin/header_admin_v", $datatitle);
$this->load->view("dashboard/admin/home_admin_v");
$this->load->view("dashboard/admin/footer_admin_v");
} else {
echo "Access Denied";
}
}
public function show_dosen($nidn){
if($this->session->userdata('akses') == '1'){
$nidn = array('nidn' => $nidn);
$data['dosen'] = $this->m_admin->edit_tampil($nidn,'data_dosen')->result();
$info = $this->m_admin->edit_tampil($nidn,'data_dosen')->result();
$user = $this->m_admin->edit_tampil($nidn,'dosen_login')->result();
$dataa = array(
'info' => $info,
'user' => $user
);
$this->load->view('dosen/dosen_data',$dataa);
}
else{
echo '<script type="text/javascript">alert("Sesi habis! Login Lagi!")</script>';
$this->load->view('login');
}
}
}
生成会话以了解管理员是否已登录--
检查会话是否在登录url(控制器)上生成--
在构造中检查会话
function __construct ()
{
parent ::__construct ();
if ($this -> session -> userdata ( "akses" ) == 1) {
redirect ( "admin/dashboard" , "refresh" );
}
if ($this -> session -> userdata ( "akses" ) == 2) {
redirect ( "user/dashboard" , "refresh" );
}
}
您是否在问为什么在成功登录后使用“后退”按钮时会出现登录页面?你还期望发生什么?为什么?警告!不要使用md5进行密码哈希!偶数表示:“警告-由于此哈希算法的快速性,不建议使用此函数保护密码”。您应该使用PHP创建一个安全的散列。然后,您可以使用验证密码是否符合哈希。另外,为什么要对发布的数据使用htmlspecialchars()
?我没有看到你在任何地方输出这些值?你也会受到攻击。阅读有关如何将参数安全绑定到查询的。特别是因为您目前根本没有从SQL注入中转义数据。@Magnus yes我在问为什么成功登录后我的主页仍在工作,当我再次回击我的web返回登录表单时,我希望登录成功后会话否允许我的主页再次进入登录表单
$this->session->set_userdata('is_admin_login', 1)
function index(){
if ($this->session->userdata('is_admin_login')) {
redirect('admin/home'); // redirect to desired location
}
$datatitle['title'] = 'Login LPPM UTY';
$this->load->view('auth/tamplate/auth_header', $datatitle);
$this->load->view('auth/login_v');
$this->load->view('auth/tamplate/auth_footer');
}
function __construct ()
{
parent ::__construct ();
if ($this -> session -> userdata ( "akses" ) == 1) {
redirect ( "admin/dashboard" , "refresh" );
}
if ($this -> session -> userdata ( "akses" ) == 2) {
redirect ( "user/dashboard" , "refresh" );
}
}