Как установить 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]()
Ответы
Ответ 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);