Функция выхода из системы для asp-classic сайта - PullRequest
3 голосов
/ 06 октября 2009

Есть ли способ предоставить функцию выхода для сайта, который использует классический asp и использует проверку подлинности Windows (т. Е. Разрешения для папок с ограничениями устанавливаются через ОС сервера, а имена пользователей и пароли хранятся в Active Directory)?

Если это имеет какое-либо значение, сервер работает под управлением IIS 5.0. Выход должен работать как минимум для IE (6, 7 и 8) и Firefox.

Обратите внимание, что это старый и довольно большой сайт - много сотен отдельных asp-страниц - поэтому любое решение, включающее изменение отдельных страниц, просто не будет работать. (По той же причине, а также из-за вежливости, не предлагайте переходить на asp.net.)

То, что я обнаружил до сих пор, предполагает, что отправка кода ответа 401 может привести к тому, что некоторые браузеры сбросят аутентификацию, но (1) я не знаю, как это сделать, и (2) Я бы действительно предпочел что-то, что действительно работает, а не просто шанс работать. Я также знаю, что возиться с объектом Session (например, .Abandon) было бы совершенно бессмысленно, потому что это не то место, где выполняется аутентификация.

1 Ответ

2 голосов
/ 07 октября 2009

Использование вами термина «выход из системы» сбивает с толку. Обычно это возможность сайтов управлять входами / выходами, и это обычно делается с использованием объекта сеанса, но это не то, о чем вы говорите.

Я понимаю две возможные вещи, о которых вы, возможно, говорите.

Аутентификация соединения

Во-первых, тот факт, что аутентификация типа, выполняемого встроенной системой безопасности Windows, выполняется на уровне соединения. Как только соединение было аутентифицировано, это соединение (которое в HTTP / 1.1 по умолчанию поддерживается в открытом состоянии) может быть использовано без необходимости в рукопожатиях аутентификации.

Может быть возможно убедить клиента или сервер закрыть соединение, включив заголовок Connection: close в ответ, но это может не привести к закрытию соединения.

Кроме того, клиент может иметь 2 или более аутентифицированных соединений, открытых одновременно. В этом случае вышеуказанный подход закроет только один из них.

Здесь делается вывод, что вы мало что можете сделать с аутентифицированными соединениями на уровне сеанса.

Кэширование учетных данных

IE будет кэшировать учетные данные, которые пользователь вводит для входа в сеть на конкретный сайт на время сеанса IE. Таким образом, даже если вам удастся закрыть существующие аутентифицированные соединения, IE просто повторно использует кэшированные учетные данные, чтобы молча завершить любое последующее подтверждение аутентификации. Возможно, можно настроить клиент так, чтобы он этого не делал, но я сомневаюсь, что это то, что вы можете использовать.

Заключение

Ответ (по крайней мере, вопрос, который, как я понимаю, вы задаете): нет, вы не можете.

...