簡體   English   中英

在會話或URL中存儲“錯誤登錄”?

[英]store “bad login” in session or url?

當用戶嘗試登錄我的網站時,我將表單發布到/login ,如果沒有電子郵件密碼匹配,則登錄腳本將重定向到/login/tried-to-login ,然后我使用“無論login/頁面上顯示內容的邏輯(例如“請重試”)。

我剛剛讀了另一個SO問題 ,一個人正在使用會話存儲此類詳細信息:

$_SESSION['bad_login'] = ...

我也許會使用'status' $_SESSION['status'] = 'login failed', $_SESSION['status'] = 'no password'

會議是一種更好的方法嗎? 要始終將用戶發送到/ login嗎? 哪個是更好/更干凈的代碼? 我想我認為在URL中包含消息是用戶友好的嗎? 將其保留在Session中會有什么好處?

假設用戶嘗試登錄,但密碼錯誤導致登錄失敗。 您可以將它們重定向到login.php?status=bad+password ,也可以設置$_SESSION['status']='bad password'; 然后重定向到login.php,並顯示消息。

那有什么區別呢?

  1. 最主要也是最明顯的一個是,使用參數方法(即login.php?status=bad+password ),任何人都可以隨時訪問該URL並查看消息,而無需實際登錄。 使用會話方法,您僅在實際嘗試登錄后才能看到消息。

  2. 顯然,無論何時,只要您執行echo $_REQUEST['status']; 您將直接打印用戶輸入而無需驗證。 用戶可以在其中注入一些HTML或其他內容。 但是,如果您設置帶有硬編碼消息的會話變量,則echo $_SESSION['status'];是安全的echo $_SESSION['status']; 不必擔心驗證。 (切勿將用戶輸入直接放在會話中而不進行消毒/驗證。)

  3. 使用會話方法,您可以在刷新登錄頁面時刪除消息的顯示。

      if(isset($_SESSION['status'])) { echo $_SESSION['status']; unset($_SESSION['status']); } 

現在刷新,您將不會再顯示該消息,因為您在打印后刪除了該值。 但是,使用URL參數方法,即使用戶實際上並沒有嘗試再次登錄,頁面的每次刷新都會再次顯示該消息!

我建議-在URL中存儲消息是更好的方法,就像Facebook確實這樣

暫無
暫無

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

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