[英]login using codeigniter
我已經使用codeigniter開發了一個登錄名,但是登錄任何人都可以在另一個地址中鍵入另一個地址並轉到另一個帳戶時遇到了這個問題。 如何避免呢? 請指示我?
這是我編寫登錄代碼的方式:
function index()
{
$this->is_logged_in();
}
function is_logged_in(){
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in)||$is_logged_in!= TRUE ){
echo 'you are not logged in ';
echo anchor('login_controller','Login');
}else{
$this->main();
}
}
我已經在CI中使用了兩種方法進行用戶身份驗證
您可以通過__construct()
函數按頁面進行操作,檢查用戶是否已登錄,然后相應地重定向他們。
或者,您可以擴展基本控制器,以便為不需要身份驗證的頁面提供(例如)常規控制器,要求您登錄的“公共”控制器和僅允許某些類型的“管理員”控制器用戶。
我再一次提到Phil Sturgeon- 擴展基本控制器
我還建議您查看一些Auth庫-公認的Ion Auth和Tank Auth非常好-但有很多可用的庫。
您的功能也相當有限-用戶只能選擇一個選項(主要)。
更好的方法是
<?php
class Foo extends Controller {
function __construct()
{
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in)||$is_logged_in!= TRUE )
{
redirect('login');
}
}
// else, logged in..proceed
}
例如。
用戶登錄后必須創建會話,例如,指定正確的憑據。 完成此操作后,您將必須在僅需要登錄用戶查看的每個頁面上進行會話檢查。
有關更多信息,請查看CI的會話類 。
你說:
我登錄時遇到此問題,可以在另一個地址中鍵入另一個地址並轉到另一個帳戶
據我了解,當您驗證用戶的憑據時,您不會在該會話中存儲該用戶的ID。
您需要在每個會話中存儲ID,以了解誰在查看每個頁面以及向他顯示什么。
控制器示例:
function validate_credentials() {
$this->load->model('users_model');
if($this->users_model->check_pass() == true) {
$data = array(
'email' => $this->input->post('email'),
'is_logged_in' => true,
'user_id' => $this->users_model->get_userid()
);
$this->session->set_userdata($data);
}
}
型號范例:
function get_userid() {
$this->db->where('email', $this->input->post('email'));
$q = $this->db->get('users');
$r = $q->row();
return $r->id;
}
現在,您可以基於$ this-> session-> userdata('user_id');動態加載內容。 並確定他們應該在每個頁面上看到的內容。
PS:如果您想擁有角色,則只需將用戶角色存儲在會話中,即可添加另一個“鍵” =>“ val”
希望能有所幫助。
//model
function fetchrowlogin($info,$table){
$this->db->select('*');
$this->db->where($info);
$this->db->from($table);
$query = $this->db->get();
if($query->num_rows() > 0){
$row = $query->row_array();
return $row;
}
}
///controller
function login(){
if(isset($_POST['login'])){
$log['email'] = $_POST['email'];
$log['password'] = $_POST['password'];
$details = $this->User_model->fetchrowlogin($log,'candidate');
if(count($details)){
$ids = $details['id'];
$email = $details['email'];
$fname = $details['fname'];
$this->session->set_userdata(array(
'custid' => $ids,
'emailid'=> $email,
'fname'=> $fname,
));
redirect('http://localhost/test27/index.php/welcome/dashboard');
}else{
redirect(base_url().'front1');
}
}
$this->load->view('front/login');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.