IsPersistent如何在OWIN Cookie身份验证中工作

时间:2015-08-11 15:58:04

标签: c# asp.net-mvc asp.net-mvc-5 owin

我似乎无法清楚地了解OWIN Cookie身份验证中的IsPersistent如何运作,以下代码是使用IsPersistent

var context = Request.GetOwinContext();
var authManager = context.Authentication;
var properties = new AuthenticationProperties { IsPersistent = isPersistence };

authManager.SignIn(properties, identity);

当用户检查/取消选中Remember me(后面使用IsPersistent)时,我看不出差异,因为如果我关闭Chrome浏览器并再次打开它以使用该网站,那么Cookie { {1}}仍然存在,即使我选中或取消选中.AspNet.ApplicationCookie,也可以让我进入。

我已在link上检查了Remember me的定义:

  

获取或设置身份验证会话是否在多个请求中保持不变。

但是,由于我认为它仍然有用,所以不要太了解。

设置OWIN cookie身份验证的代码:

IsPersistent

3 个答案:

答案 0 :(得分:64)

永久性Cookie将作为文件保存在浏览器文件夹中,直到它们过期或手动删除。即使您关闭浏览器,这也会导致cookie保持不变。

如果IsPersistent设置为false,浏览器将获取会话cookie,当浏览器关闭时会被清除。

现在重启浏览器后会话cookie不会清除的原因是Chrome默认设置。 要修复它,请转到chrome 设置 - > 高级,并在系统部分下取消选中在关闭Google Chrome后继续运行后台应用

答案 1 :(得分:2)

public void Configuration(IAppBuilder app)
{
    //Some Code
    app.UseCookieAuthentication(GetCookieAuthenticationOptions());
    //Some Code
}

private static CookieAuthenticationOptions GetCookieAuthenticationOptions()
{
    var options  = new CookieAuthenticationOptions();
    {
        CookieName = "AuthCookie",  //Some cookie settings here
    };
    var provider = (CookieAuthenticationProvider)options.Provider;
    provider.OnResponseSignIn = (context) => 
    {
        context.Properties.IsPersistent = true;
        context.Properties.ExpiresUtc = DateTimeOffset.UtcNow.AddHours(24);
    };
    return options;
}

答案 2 :(得分:0)

.Net Core 2.2的永久cookie,您可能想尝试一下

示例

var claimsIdentity = new ClaimsIdentity(new[]
 { new Claim(ClaimTypes.Name, "test"),},CookieAuthenticationDefaults.AuthenticationScheme);

HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), new AuthenticationProperties
{
  IsPersistent = true,
  ExpiresUtc = DateTime.UtcNow.AddMinutes(30)
});