[英]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,並顯示消息。
那有什么區別呢?
最主要也是最明顯的一個是,使用參數方法(即login.php?status=bad+password
),任何人都可以隨時訪問該URL並查看消息,而無需實際登錄。 使用會話方法,您僅在實際嘗試登錄后才能看到消息。
顯然,無論何時,只要您執行echo $_REQUEST['status'];
您將直接打印用戶輸入而無需驗證。 用戶可以在其中注入一些HTML或其他內容。 但是,如果您設置帶有硬編碼消息的會話變量,則echo $_SESSION['status'];
是安全的echo $_SESSION['status'];
不必擔心驗證。 (切勿將用戶輸入直接放在會話中而不進行消毒/驗證。)
使用會話方法,您可以在刷新登錄頁面時刪除消息的顯示。
if(isset($_SESSION['status'])) { echo $_SESSION['status']; unset($_SESSION['status']); }
現在刷新,您將不會再顯示該消息,因為您在打印后刪除了該值。 但是,使用URL參數方法,即使用戶實際上並沒有嘗試再次登錄,頁面的每次刷新都會再次顯示該消息!
我建議-在URL中存儲消息是更好的方法,就像Facebook確實這樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.