ASP.NET Core 2.2 Выход пользователя из системы, когда вкладка браузера закрыта - IsPersistent не имеет никакого эффекта - PullRequest
0 голосов
/ 03 мая 2019

Я знаю, что этот вопрос, кажется, уже был задан, однако это связано с ASP.NET Core, а не с ASP.NET 5.

Я пытаюсь выйти из системы, когда пользователь закрывает вкладку браузера; Я тестирую это с Chrome и Safari на MacOS.

В настоящее время, когда я вхожу в систему, и вкладка браузера закрывается и открывается заново, пользователь остается в системе.

Когда я захожу в систему, я устанавливаю AuthenticationProperties IsPersistent на false. Тем не менее, пользователь остается в системе, когда вкладка браузера закрыта, как в Chrome, так и в Safari. (Браузер не закрыт, только вкладка).

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

Согласно документам: постоянные файлы cookie

«Возможно, вы хотите, чтобы 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 Ответ

1 голос
/ 03 мая 2019

Сеансовые cookie-файлы и файлы cookie для аутентификации являются двумя отдельными cookie-файлами, и поэтому options.IdleTimeout = TimeSpan.FromSeconds(10); не влияет на cookie-файл аутентификации.

При установке параметров cookie-файла аутентификации ExpireTimeSpan, как показано ниже,Пользователь должен выйти из системы, если браузер закрыт или неактивен более 10 секунд.Кроме того, SlidingExpiration приведет к желаемому эффекту отказа от выхода пользователя из системы, если он активен до истечения времени, путем выдачи нового файла 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.например, это не делает куки не истекает.IsPersistent - пережить закрытие browser, not the tab.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...