如何设置asp.net Identity的cookie过期时间

11 浏览
0 Comments

如何设置asp.net Identity的cookie过期时间

我使用Asp.Net Identity来控制我的应用程序的授权。现在,我需要做以下操作:如果用户在30分钟内没有操作,则跳转到登录页面,当他登录时不选择“isPersistent”复选框。

而且,如果他选择了“isPersistent”复选框,则将cookie的过期日期设置为14天。

我尝试通过更改Startup.Auth.cs文件来实现这个目标,代码如下:

public void ConfigureAuth(IAppBuilder app)
{
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login"),
        SlidingExpiration = true,
        CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME
    });
}

以及SignIn代码如下:

private async Task SignInAsync(User user, bool isPersistent)
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
    if (isPersistent)
    {
        AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
    }
    else
    {
        AuthenticationManager.SignIn(new AuthenticationProperties() { ExpiresUtc = new DateTimeOffset(DateTime.UtcNow.AddMinutes(30)) }, identity);
    }
}

但是我发现,当用户不选择isPersistent复选框时,cookie的过期日期已经是“Session”,而不是当前时间加上30分钟。

enter image description here

当使用上述代码时,cookie的状态如上图所示,所以“记住我”复选框无法工作。:(。

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            ExpireTimeSpan = TimeSpan.FromMinutes(30),
            SlidingExpiration = true,
            CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME
        });

enter image description here

0