除了提供用戶登錄的方法外,FormsAuthentication 類還提供了 SignOut方法。SignOut 方法只是銷燬表單身份驗證票證,從而從網站中註銷用戶。
提供註銷鏈接是一個常用功能,因而ASP.NET 有一個專門設計來註銷用戶的控件。LoginStatus控件 根據用戶的身份驗證狀態來顯示“登錄” 鏈接按鈕或“註銷”鏈接按鈕。“登錄”鏈接按鈕呈現給匿名用戶,而“註銷”鏈接按鈕呈現給已驗證用戶。可通過LoginStatus 的 LoginText和LogoutText屬性來配置“登錄”和“註銷”鏈接按鈕的文本。
單擊“登錄”鏈接按鈕會導致一個回傳,進而重定向到登錄頁面。單擊“註銷”鏈接按鈕會導致LoginStatus 控件調用FormsAuthentication.SignOff() 方法,然後將用戶重定向到某個頁面。註銷用戶被重定向到哪個頁面取決於LogoutAction 屬性,該屬性可以取以下三值之一:
- Refresh – 默認值;將用戶重定向到他們剛訪問的頁面。如果他們剛訪問的頁面不允許匿名用戶,則FormsAuthenticationModule 會自動將用戶重定向到登錄頁面。
- Redirect – 用戶被重定向到 LoginStatus 的 LogoutPageUrl 屬性中指定的 URL 。
- RedirectToLoginPage – 用戶被重定向到登錄頁面。
您可能會奇怪此處爲何要進行重定向。如果用戶想停留在同一頁面,爲何還需要顯式重定向?原因是單擊“註銷” 鏈接按鈕時,用戶的表單身份驗證票證仍然在Cookie 集合中。因此,回傳請求是一個驗證過的請求。LoginStatus 控件會調用SignOut 方法,但可能是在FormsAuthenticationModule 驗證了用戶之後調用。因此,顯式重定向會導致瀏覽器重新請求頁面。但瀏覽器重新請求頁面時,表單身份驗證票證已刪除,因此該請求是匿名的。
自定義註銷控件的代碼:
FormsAuthentication.SignOut();//表示銷燬表單身份驗證票證
Response.Redirect("~/Login.aspx");//表示回到登錄頁面