Подтвердить что ты не робот

Как установить cookie файлы cookie asp.net истекает

Я использую 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
    });
}

и код входа в систему, как это:

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 уже равен "Сеанс", а не текущему времени плюс 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

4b9b3361

Ответ 1

Если для свойства IsPersistent параметра AuthenticationProperties установлено значение false, время истечения файла cookie устанавливается на сеанс.

Если флажок "запомнить меня" отмечен, тогда AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true }, userIdentity); создаст файл cookie с временем истечения, равным ExpireTimeSpan, установленным в Startup.cs (по умолчанию до 14 дней).

Если флажок "запомнить меня" НЕ отмечен, тогда вы должны использовать AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30)}, userIdentity);. Снова IsPersistent установлено значение true, но теперь мы даем значение ExpiresUtc, поэтому оно не используется из CookieAuthenticationOptions из Startup.cs.

public override async Task SignInAsync(ApplicationUser user, bool isPersistent, bool rememberBrowser)
{
    var userIdentity = await CreateUserIdentityAsync(user).WithCurrentCulture();
    // Clear any partial cookies from external or two factor partial sign ins
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie, DefaultAuthenticationTypes.TwoFactorCookie);
    if (rememberBrowser)
    {
        var rememberBrowserIdentity = AuthenticationManager.CreateTwoFactorRememberBrowserIdentity(ConvertIdToString(user.Id));
        AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity, rememberBrowserIdentity);
    }
    else
    {
        //AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity);
        if (isPersistent)
        {
            AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, userIdentity);
        }
        else
        {
            AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30) }, userIdentity);
        }        
    }
}

Ответ 2

Используйте это...

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

Ответ 3

У меня была та же проблема, и этот код работал для меня (внутри файла Startup.cs)..

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

Это добавляет примерно 27 лет (или никогда не истекает) к постоянному cookie.

NB. Если вы хотите меньше времени истечения, вы можете использовать TimeSpan.FromMinutes(1); в течение 1 минуты или TimeSpan.FromSeconds(30); в течение 30 секунд и т.д.

Ответ 4

У меня странная проблема, это происходит после развертывания в IIS. срок действия файла cookie истекает через очень короткое время, и пользователь вышел из системы, однако я установил его на 3 месяца

вот мои фрагменты кода: -

 app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Login"),
                LogoutPath = new PathString("/Logout"),
                ExpireTimeSpan = TimeSpan.FromDays(30),
                CookieSecure = CookieSecureOption.SameAsRequest,
                SlidingExpiration = true,
                CookieName = ".app",
                CookieHttpOnly = true,
                CookiePath = "/",
                CookieDomain = Domain,

            });
  AuthenticationManager.SignIn(new AuthenticationProperties()
            {
                AllowRefresh = true,
                IsPersistent = isPersistent,
                //Dictionary = { { "RememberMe", isPersistent ? "true" : "false" } },
                ExpiresUtc = isPersistent ? DateTime.UtcNow.AddMonths(3) : DateTime.UtcNow.AddMinutes(20)
            }, identity);