Как выйти из системы при закрытии браузера или вкладки ASP.NET MVC?
Мне нужно выйти из пользователя, когда пользователь закрыл вкладку или браузер, как это сделать в ASP.NET MVC?
1 ответов
есть несколько вещей, которые вы можете сделать, чтобы убедиться, что пользователь вышел, когда браузер закрыт, но это зависит от того, как вы устанавливаете файл cookie FormsAuthentication:
- использовать
Cookieless=True
. - установите FormsAuthenticationTicket не быть постоянным
- использовать
FormsAuthentication.SetAuthCookie
чтобы установить настойчивость вfalse
- используйте подход 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;';
});
другой предостережения
это также имеет значение, какой браузер вы используете. Хром имеет возможность работать в фоновом режиме, и это сохраняет сеансовые куки до тех пор, пока их тайм-аут не будет достигнут-они не будут удалены, когда браузер закрыт (я узнал это на собственном горьком опыте).