2012-03-12 71 views
1

我在我的網站中使用了以下軟件包中的記住我功能:http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/。它工作正常。但我面對的是,已刪除的用戶可以訪問帳戶只是因爲保持登入問題Zend框架記住我 - 正在運行的問題

的場景如下:。設置讓我登錄後

  1. 用戶登錄
  2. 他離開系統關閉而不註銷。
  3. 當天晚上他的帳戶被刪除。
  4. 他在第二天早上登錄該網站。

正如他所設定簽署期間,他得到他的會議,他可以發佈一個故事,在他的帳戶做什麼都不知道的事實,他的帳戶已經得到了前一天被刪除。另外,我還記得14天。

任何想法如何解決這個問題?

感謝

+0

您只能檢查你檢查什麼。當會話結束並且用戶被刪除並且持續登錄過程啓動以保持用戶登錄時,它需要驗證用戶是否仍然存在。 – hakre 2012-03-12 11:15:29

+0

真的取決於用戶如何進行身份驗證。您可以嘗試訪問您的數據庫並手動刪除其帳戶。 – Tom 2012-03-12 11:16:46

+0

shirley該網站應該檢查什麼時候編輯或發佈的用戶這樣做有權限?否則,我會建議刪除保持登錄選項,如果它給你這麼多麻煩。或者,您可以檢查會話信息,以確定該用戶在第二天再次返回該網站時是否仍然存在。除此之外,我想不出一個強制執行的好方法。 – jammypeach 2012-03-12 11:18:28

回答

3

擴展會話的到期時間用戶驗證超過幾個小時是一個壞主意,原因很多,不僅僅是因爲你保留了被刪除用戶的會話。還有一個與您在數據庫/會話存儲中保持活動會話(使用session_id)相關的性能和安全問題。

persisted login with Zend_Session::rememberMe

在任何情況下,你應該重新驗證每個頁面加載用戶帳戶,以確保他的用戶仍然存在並活躍:

我已經創建了一個重新驗證功能,我在每個頁面加載調用。該函數在用戶可以執行任何操作之前從控制器的init()函數中調用。

public static function revalidate() { 
     $userData = self::getIdentity(); 

     $modelUsers = new \Model_Users(); 
     $user = $modelUsers->fetchWithEmail($userData['email']); 

     if ($user instanceof \Model_User) { 
      if ($user->getRoleType() == 'ACCOUNT') { 
       return $user; 
      } 
     } 
     return false; 
    } 
2

正如他所設定保持登錄狀態,他得到他的會議,他可以發佈一個故事,在他的帳戶做什麼都沒有知道的事實,他的賬戶已經得到了前一天被刪除。

當您刪除用戶時,您也必須刪除所有用戶的會話。

+0

謝謝各位朋友.. !! – Janaki 2012-04-23 08:29:10

0

這正是爲什麼您需要爲每個應用程序/頁面設置會話超時。

使用ini_set(),在會話續航時間

ini_set("session.cookie_lifetime","1800"); //half an hour 

然後檢查是否會話存活在像

if (!empty(session_id())) { 
    header("Location: index.php"); //GO to home page 
    exit; 
} 
+0

謝謝大家的寶貴意見。 – Janaki 2012-03-12 11:41:04

1

在數據庫中的會話表的每一個安全頁面,使用一種外國使用ON DELETE CASCADE的USERS表的關鍵字。或者,您可以在獲取會話時在用戶表上執行JOIN。

0

當用戶離開他的電腦並在第二天回到您的網站時,他的Session已經過期。在這一點上,如果你允許他訪問你的網站,那是因爲他選擇了記住,你通過在計算機上設置cookie來做到這一點。

當您基於cookie驗證用戶時,您需要根據數據庫檢查cookie值。 不要只檢查是否存在Cookie

這將解決您的問題。此外,它會插入一個主要的安全漏洞,惡意的人可以簡單地在他的計算機上手動創建cookie並使用它們來驗證您的網站。

0

您只能檢查您檢查的內容。當下會話結束和 用戶刪除和持久登錄程序踢在 保持用戶登錄時,需要驗證仍然存在用戶。 - hakre

爲hakre說,我想你一定每次他試圖時間更改設置或做一些像發送新的崗位或發表新評論等,讓我們嘗試