如何设置asp.net标识cookie到期时间

时间:2016-05-07 09:09:35

标签: c# asp.net cookies asp.net-identity

我使用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复选框时,cookies的截止日期已经是“会话”,而不是当前时间加上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

4 个答案:

答案 0 :(得分:36)

如果IsPersistent的{​​{1}}属性设置为false,则Cookie过期时间设置为Session。

如果复选框"请记住我" 已选中,然后AuthenticationProperties将创建一个Cookie,其过期时间等于您在AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true }, userIdentity);中设置的ExpireTimeSpan(默认为14天)。

如果复选框"请记住我"如果未选中,则必须使用Startup.cs。同样AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30)}, userIdentity);设置为true,但现在我们为ExpiresUtc提供一个值,因此它不会使用来自IsPersistent的{​​{1}}。

CookieAuthenticationOptions

答案 1 :(得分:7)

使用此...

public void ConfigureAuth(IAppBuilder app)
{
  app.UseCookieAuthentication(new CookieAuthenticationOptions
  {
      ExpireTimeSpan = TimeSpan.FromHours(1),
  });            
}

答案 2 :(得分:4)

为了实现您在ASP.NET Core 3.1中描述的功能,我通过以下方式在Startup中配置身份验证:

        services.ConfigureApplicationCookie(o =>
        {
            ...
            o.ExpireTimeSpan = TimeSpan.FromMinutes(30);
            o.SlidingExpiration = true;
            ...
            o.Events.OnSigningIn = ctx =>
            {
                if (ctx.Properties.IsPersistent)
                {
                    var issued = ctx.Properties.IssuedUtc ?? DateTimeOffset.UtcNow;
                    ctx.Properties.ExpiresUtc = issued.AddDays(14);
                }
                return Task.FromResult(0);
            };
        });

使用OnSigningIn回调,如果单击“ isPersistent”复选框,我将过期日期显式设置为现在+ 14天。

答案 3 :(得分:1)

我遇到了同样的问题,这段代码对我有用(在Startup.cs文件中)..

services.Configure<IdentityOptions>(options =>
{
    options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(9999);
});

这会给持久性cookie增加大约 27年(或永不过期)。

注意:如果您希望减少到期时间,可以使用TimeSpan.FromMinutes(1); 1分钟或TimeSpan.FromSeconds(30); 30秒等。