簡體   English   中英

在Codeigniter中自動注銷用戶會話

[英]Logout user session automatically in codeigniter

我正在制作基於CI 3.0.4的管理面板基於Web的應用程序。 因此,如果用戶以管理員身份登錄,但同時超級用戶將該用戶從admin更改為普通用戶,則應立即將其注銷。

這里的問題是我在會話中存儲數據,如果我不這樣做,那么我每次都需要運行db查詢,這將給應用程序帶來過多的數據庫負載。

無論如何,只要更改了用戶會話,我們便可以注銷用戶會話或更新用戶的會話值。 如果我們能夠更新這些內容,那么我的應用程序將檢查並注銷。

與Google一樣,不使用gmail。 如果從多個設備登錄,則可以注銷其他設備實例。

請提出一些邏輯或最佳方法來處理此類情況。

如果您需要處理當前正在會話中存儲的數據,則不應首先將其存儲在其中。

嘗試讀取和/或更改另一個用戶的會話數據可能是當下的想法,因為在會話本身內部存儲“已登錄”標志比較容易。 但是,這樣做是錯誤的,而且一開始聽起來並不容易。 會話數據被設計為只能由一個用戶和一個用戶讀取,並且由於PHP序列化會話數據的方式,不可能忽略這一事實。

與其他人的評論相反,將驅動程序更改為“數據庫”也無濟於事。 序列化格式使這變得困難,而不是存儲。

實際的解決方案是以某種方式將sessionId <-> userId關系存儲在會話本身之外,因此您以后可以擦除屬於剛剛修改的權限的用戶的所有會話。 關系數據庫確實做到了這一點並不重要,但是您可以為此使用任何類型的存儲。

對於這種情況,如果您還不能完成項目,那么ION auth是一個很好的解決方案。 它具有組選項,您可以在__constract函數中檢查用戶是否為admin。 像這樣的東西

public function __construct()
  {
    if (!$this->ion_auth->is_admin()) {$this->ion_auth->logout();die();}
    parent::__construct();
    $this->load->database();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM