关闭浏览器选项卡时,ASP.NET Core 2.2注销用户-IsPersistent无效

时间:2019-05-03 01:42:28

标签: c# asp.net-core

我知道这个问题似乎已经被提出,但这与ASP.NET Core有关,与ASP.NET 5有关。

我正在尝试使用户在关闭浏览器选项卡时注销;我正在MacOS上使用Chrome和Safari对此进行测试。

当前,当我登录用户时,浏览器选项卡已关闭并重新打开,用户仍保持登录状态。

当我登录用户时,我将AuthenticationProperties IsPersistent设置为false。但是,无论是在Chrome还是在Safari上,关闭浏览器选项卡时,用户仍保持登录状态。 (浏览器没有关闭,只有选项卡)。

        Task task = HttpContext.SignInAsync(principal, 
           new AuthenticationProperties
           {
              IsPersistent = false
           });             
        await task;

根据文档:persistent-cookies

  

“您可能希望Cookie在浏览器会话之间持久存在”

在上述情况下,我将IsPersistent设置为false,并假定 Cookie不能在会话中存活。

据我了解,浏览器不会关闭会话,服务器会关闭会话,这将设置为10秒以下。

但是通过以下测试,我无法使用户注销。

  1. 登录用户
  2. 确认用户已登录
  3. 关闭浏览器标签,(不关闭浏览器)
  4. 等待10秒以上
  5. 打开浏览器选项卡,确保用户未登录。失败

这可能不相关... Starup.cs具有以下功能:

        services.AddSession(options =>
        {
            // Set a short timeout for easy testing.
            options.IdleTimeout = TimeSpan.FromSeconds(10);
            options.Cookie.HttpOnly = true;
            // Make the session cookie essential
            options.Cookie.IsEssential = true;

        });

        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
        {
            options.LoginPath = "/auth/login";
            options.AccessDeniedPath = "/auth/accessdenied";
        });

1 个答案:

答案 0 :(得分:1)

会话Cookie和身份验证Cookie是两个单独的Cookie, 因此options.IdleTimeout = TimeSpan.FromSeconds(10);对身份验证cookie无效。

通过如下设置ExpireTimeSpan身份验证cookie选项,将导致用户在浏览器关闭或不活动10秒钟以上时注销。此外,SlidingExpiration将通过在旧的Cookie过期之前发布一个新的cookie,从而达到不注销用户(如果在该过期时间之前处于活动状态)的预期效果。

        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
        {
            options.LoginPath = "/auth/login";
            options.AccessDeniedPath = "/auth/accessdenied";
            options.Cookie.IsEssential = true;
            options.SlidingExpiration = true; // here 1
            options.ExpireTimeSpan = TimeSpan.FromSeconds(10);// here 2
        });

IsPersistent属性设置为true时,不会影响cookie的过期时间。例如它不会使cookie不过期。 IsPersistent将会在browsernot the tab的关闭中幸存下来。