我正在使用方法“FormsAuthentication.SetAuthCookie”对我的应用程序中的用户进行身份验证,但是当我关闭浏览器并重新打开它时,它仍然经过身份验证,但会话已经结束,然后我的应用程序崩溃,因为它在会话上有必要的数据来生成菜单。
我想要做的是:创建身份验证票证而不创建auth cookie,每当用户在新的浏览器会话中打开页面时,它将再次请求登录。
我怎样才能做到这一点。
答案 0 :(得分:4)
会话和身份验证不同。如果您希望在浏览器关闭时cookie消失,请使用
FormsAuthentication.SetAuthCookie("username", false);
答案 1 :(得分:2)
是否有其他浏览器窗口打开?有时如果打开其他浏览器窗口,cookie将会持续存在。
答案 2 :(得分:0)
浏览器关闭时,Cookie或会话中没有任何属性可以使它们过期。它们只受到期时间的控制(任何指定cookie标准的人都应该想到的东西。)
将false传递给SetAuthMethod不会告诉浏览器在浏览器关闭时删除cookie。事实上,如果浏览器启用了一个选项,可以返回打开的选项卡,它将使用所有的cookie重新打开这些选项卡。如果这些身份验证cookie尚未过期,您将发现自己已登录。
您可以做的是指定用户检查“记住我”与未检查时的不同到期时间:
// create this private method.
private void SetAuthCookie(string emailAddress, bool keepMeLoggedIn)
{
int timeout = keepMeLoggedIn ? 525600 : 20; // Timeout in minutes, 525600 = 365 days.
var ticket = new FormsAuthenticationTicket(emailAddress, keepMeLoggedIn, timeout);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);
cookie.HttpOnly = true; // cookie not available in JavaScript.
HttpContext.Response.Cookies.Add(cookie);
}
// use it instead of FormsAuthentication.SetAuthCookie(model.username, model.RememberMe);
SetAuthCookie(model.username, model.RememberMe);