Asp.net mvc Asp.net MVC身份验证已勾选,但未创建身份验证cookie

Asp.net mvc Asp.net MVC身份验证已勾选,但未创建身份验证cookie,asp.net-mvc,forms-authentication,Asp.net Mvc,Forms Authentication,我正在使用“FormsAuthentication.SetAuthCookie”方法对应用程序中的用户进行身份验证,但当我关闭浏览器并重新打开它时,它仍然经过身份验证,但会话已经结束,然后我的应用程序崩溃,因为它在会话中有生成菜单所需的数据 我想做的是:创建身份验证票证而不创建身份验证cookie,每当用户在新的浏览器会话中打开页面时,它都会再次请求登录 如何实现这一点。会话和身份验证是不同的。如果希望浏览器关闭时cookie消失,请使用 FormsAuthentication.SetAuthC

我正在使用“FormsAuthentication.SetAuthCookie”方法对应用程序中的用户进行身份验证,但当我关闭浏览器并重新打开它时,它仍然经过身份验证,但会话已经结束,然后我的应用程序崩溃,因为它在会话中有生成菜单所需的数据

我想做的是:创建身份验证票证而不创建身份验证cookie,每当用户在新的浏览器会话中打开页面时,它都会再次请求登录


如何实现这一点。

会话和身份验证是不同的。如果希望浏览器关闭时cookie消失,请使用

FormsAuthentication.SetAuthCookie("username", false);

会话和身份验证是不同的。如果希望浏览器关闭时cookie消失,请使用

FormsAuthentication.SetAuthCookie("username", false);

还有其他浏览器窗口打开吗?有时,如果有其他浏览器窗口打开,cookie将持续存在。

是否有其他浏览器窗口打开?有时,如果有其他浏览器窗口打开,cookie将持续存在。

浏览器关闭时,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);

浏览器关闭时,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);

是的,基本上不给用户创建持久cookie的选项-如果您使用的是ASP.NET MVC站点的默认帐户控制器,则更改FormsAuth.sign(用户名,rememberMe);至FormsAuth.sign(用户名,false);是的,基本上不给用户创建持久cookie的选项-如果您使用的是ASP.NET MVC站点的默认帐户控制器,则更改FormsAuth.sign(用户名,rememberMe);至FormsAuth.sign(用户名,false);