如何使用Identity ASP.NET MVC框架在浏览器关闭后保持用户登录状态?

问题描述 投票:0回答:2

目前,每次用户浏览器关闭时,他/她都必须重新登录。

当他们登录时,这是我用来在身份中对他们进行签名的代码。

SignInManager.SignIn(user, false, false);

这是我今天的身份验证配置方式

public void ConfigureAuth(IAppBuilder app)
{
    app.CreatePerOwinContext(ApplicationDbContext.Create);
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
    app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {        
        AuthenticationType = "SomeCustomName",
        LoginPath = new PathString("/Account/Login"),
        Provider = new CookieAuthenticationProvider
        {
            OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                validateInterval: TimeSpan.FromMinutes(60),
                regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
        },
        SlidingExpiration = false,
        ExpireTimeSpan = TimeSpan.FromMinutes(60)
    });

    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
    app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(3));
    app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
}

如何在关闭浏览器的情况下保持用户登录状态 60 分钟?

c# asp.net-mvc asp.net-identity identity asp.net-identity-2
2个回答
4
投票

您应该进行 2 项更改。

AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
SlidingExpiration = true,

您希望使用 cookie,以便将其保留在浏览器中,并且在以后再次打开网站时可以重新读取。您还希望滑动过期时间,这样每个请求都会延长 cookie 的生命周期,否则用户将必须在 cookie 发出后 60 分钟后重新进行身份验证。 支持文档:

    CookieAuthenticationOptions 文档
  • 默认身份验证类型
  • 最后登录的调用应该传递
true

作为第二个参数。第三个参数仅在您使用两因素身份验证时才相关。


SignInManager.SignIn(user, true, false);

旁注

为了安全起见,设置选项

CookieHttpOnly = true

也不是一个坏主意,它可以确保脚本/客户端代码无法访问 cookie。

    


0
投票

Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddDays(7);

© www.soinside.com 2019 - 2024. All rights reserved.