Кнопка Выхода из системы IIS6 ASP.NET Базовая аутентификация
-
03-07-2019 - |
Вопрос
У меня есть требование к явной кнопке выхода из системы для пользователей в ASP.NET веб-приложении.Я использую IIS6 с базовой аутентификацией (SSL).Я могу перенаправить на другую веб-страницу, но браузер поддерживает сеанс в рабочем состоянии.Я поискал в Google и нашел способ сделать это, включив активный элемент управления x для связи с IIS и завершения сеанса.Я нахожусь в ограниченной среде, которая не допускает проверку подлинности форм, и активные элементы управления x также не запрещены.Было ли у кого-нибудь еще такое требование и как вы с ним справились?
Ладно, это то, чего я боялся.Я видел похожие ответы в сети, и я надеялся, что у кого-нибудь найдется способ сделать это.Но все же спасибо, что уделили мне время.Я думаю, я могу использовать javascript, чтобы предотвратить появление кнопки "Назад", такой как history.back()
Решение
Я боролся с этим сам в течение нескольких дней.
Использование IE document.execCommand ('ClearAuthenticationCache');
'не для всех - хороший вариант:
1) он сбрасывает все учетные данные, а это означает, что пользователь, например, также выйдет из своего gmail или любого другого веб-сайта, на котором он в настоящий момент прошел аутентификацию
2) это только IE;)
Я попытался использовать Session.Abandon (), а затем перенаправить на свой Default.aspx. Одного этого недостаточно. Вам необходимо явно указать браузеру, что сделанный запрос не авторизован. Вы можете сделать это, используя что-то вроде:
response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();
Это приведет к следующему: пользователь нажимает кнопку выхода == > он получит основное окно входа в систему. ОДНАКО: если он нажимает клавишу escape (диалоговое окно входа в систему исчезает) и нажимает кнопку «Обновить», браузер автоматически отправляет учетные данные снова, заставляя пользователя войти в систему, хотя он может подумать, что он вышел из системы.
Хитрость для решения этой проблемы заключается в том, чтобы всегда выплевывать уникальное «царство» . Затем браузер НЕ отправляет учетные данные в случае, описанном выше. Я решил выплюнуть текущую дату и время.
response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();
Еще одна вещь, которую вам нужно сделать, это сказать браузеру не кэшировать страницу:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();
Со всеми этими вещами это работает (для меня) в IE, но до сих пор я все еще не был в состоянии препятствовать тому, чтобы firefox регистрировал пользователя, когда пользователь сначала нажимает escape (скрывает основной диалог входа в систему) и затем обновить (F5) или кнопку возврата браузера.
Другие советы
Session.Abandon
Метод уничтожает все объекты, хранящиеся в объекте Session, и освобождает их ресурсы. Если вы не вызываете метод Abandon явно, сервер уничтожает эти объекты по истечении времени сеанса.
Вы пробовали вызывать сеанс.Отказаться в ответ на нажатие кнопки?
Редактировать:
Казалось бы, это классическая проблема с кнопкой "Назад".
Вы очень мало что можете сделать с кнопкой "Назад".Представьте, что пользователь только что открыл текущую страницу в новом окне, затем нажал кнопку выхода, эта страница, похоже, выходит из системы, но это не сразу повлияет на содержимое другого окна.
Только когда они попытаются перейти куда-нибудь в этом окне, станет очевидно, что их сеанс завершен.
Многие браузеры реализуют кнопку "Назад" аналогичным (хотя и не идентичным) способом.Возврат к предыдущей странице не обязательно является навигацией с точки зрения HTML / HTTP.
Это решение этой проблемы, которое работает в IE6 и выше.
<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>
<script>
function logout()
{
document.execCommand("ClearAuthenticationCache",false);
}
</script>
Нашел это из http://msdn.microsoft.com/en- нас / библиотека / bb250510% 28VS.85% 29.aspx
Коротко о веб-команде Ваши учетные данные, пожалуйста
В: Джерри Б. пишет: «После того, как пользователь подтвердил и обработал свой запрос, я хочу сделать его недействительным. Предполагая, что эта машина находится в открытой среде, где кто-нибудь может подойти и использовать ее, я хочу бросать новый вызов каждый раз, когда пользователь получает доступ к определенному модулю в Интернете. & Quot;
A: Это часто запрашиваемая функция команды Internet Explorer, и хорошие люди там дали нам способ сделать это в Internet Explorer 6.0 SP1. Все, что вам нужно сделать, это вызвать метод execCommand для документа, передав в качестве параметра команды ClearAuthenticationCache, например:
document.execCommand("ClearAuthenticationCache");
Эта команда сбрасывает все учетные данные в кэше, так что если пользователь запрашивает ресурс, требующий аутентификации, запрос на аутентификацию повторяется.
Я поставил это на кнопку ссылки выхода из системы, и она работает в IE6 sp1 и выше:
OnClientClick="document.execCommand('ClearAuthenticationCache');"