Как выйти из системы при закрытии браузера или вкладки ASP.NET MVC?

Мне нужно выйти из пользователя, когда пользователь закрыл вкладку или браузер, как это сделать в ASP.NET MVC?

1 ответов


есть несколько вещей, которые вы можете сделать, чтобы убедиться, что пользователь вышел, когда браузер закрыт, но это зависит от того, как вы устанавливаете файл cookie FormsAuthentication:

  1. использовать Cookieless=True.
  2. установите FormsAuthenticationTicket не быть постоянным
  3. использовать FormsAuthentication.SetAuthCookie чтобы установить настойчивость в false
  4. используйте подход JavaScript для удаления cookie на window.unload.

Cookieless=True подход:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="/Account/Login"
           protection="All"
           cookieless="true" //set to true   
  </authentication>
</system.web>

это добавляет значение cookie к строке запроса в каждом запросе. Проблема с этим подходом заключается в том, что он не очень безопасен, и это мешает SEO. Если пользователь отправляет кому-либо URL-адрес, который он использует, этот человек может войти в систему как исходный пользователь (возможно, не то, что вы хотите). Что касается "возиться с SEO", это заставляет ту же страницу выглядеть по-другому для googlebot на основе того, какой URL передается. Каждое изменение QueryString делает его новым URL-адресом, и если кто-то использует это для публикация ссылки; это разбавит Результаты поиска для данного фактического URL-адреса.

FormsAuthenticationTicket подход

когда вы устанавливаете cookie аутентификации для пользователя, установите Persistent в False.

если вы делаете это в FormsAuthentication.SetAuthCookie, это по умолчанию. Если вы используете FormsAuthenticationTicket class, вы должны указать срок действия cookie.

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,                   //version
    "blah",              //Cookie Name 

);

FormsAuthentication.SetAuthCookie() подход

по умолчанию, если вы не установите persistent файл cookie проверки подлинности истекает в конце сеанса (когда пользователь закрывает браузер).

FormsAuthentication.SetAuthCookie("CookieValue", false); //second argument is persistent'

JavaScript подход:

нет надежных методов; все, что вы можете сделать, это установите дату истечения срока действия cookie до настоящего времени и надеюсь, что браузер пользователя сотрудничает. Если вы действительно хотите, чтобы cookie исчез, вы всегда можете попробовать подход JavaScript, но это не сработает, если у пользователя отключен JavaScript.

window.addEventListener('unload', function(event) {
   document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
});

другой предостережения

это также имеет значение, какой браузер вы используете. Хром имеет возможность работать в фоновом режиме, и это сохраняет сеансовые куки до тех пор, пока их тайм-аут не будет достигнут-они не будут удалены, когда браузер закрыт (я узнал это на собственном горьком опыте).