我正在使用loginStatus控件让我的用户注销。我没有为注销过程编写更多的代码(没有会话删除,删除cookie或重定向用户),只是依靠控件的内置代码。
现在我想知道在页面上放置一个 LoginStatus 控件并让它自己完成其余部分是否足够(我的意思是删除会话 cookie 并注销用户),或者我应该处理它的事件并编写代码来删除 cookie 并注销用户。
我读过,即使在通过 LoginStatus 控件注销用户后,我们也应该删除会话 cookie 以避免其他人获取和使用它(劫持它)或添加一些字符串,如 IP 或......到其内容以避免劫持...是真的吗?
尝试这样的事情:
FormsAuthentication.SignOut();
Session.Abandon();
// clear authentication cookie
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie1);
然后
FormsAuthentication.RedirectToLoginPage();
LoginStatus
控件仅注销您的 FormsAuth 票证,但不明确放弃当前会话。重要的是要注意,FormsAuth 票证(存储为 cookie)是实际决定用户是否登录以及谁登录的内容;ASP.NET 会话不会(除非您有自定义代码在表单身份验证状态之上额外检查 ASP.NET 会话)。
因此,如果您只需要签出票证,那么您就可以开始了。但是,如果您的应用程序将信息存储在 ASP.NET 会话中,并且您也需要将其丢弃,则应将事件处理程序添加到页面代码隐藏中的LoggedOut
事件并调用 Session.Abandon (或任何您认为合适的内容)。