Я боролся с этим сам в течение нескольких дней.
Использование 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) или кнопку возврата браузера.