Могу ли я создать HttpHandler, который никогда не участвует в проверке подлинности с помощью форм? - PullRequest
1 голос
/ 22 июня 2011

Я создал обработчик выхода из системы, который зарегистрирован в Logout.aspx в моем web.config.Я хочу, чтобы это можно было запустить с любого пути.Работает отлично.Моя главная страница регистрирует функцию клиентского скрипта, которая автоматически выводит людей из системы за 1 минуту до истечения срока их билета или сеанса (они получают предупреждение обратного отсчета, которое начинается через 2 минуты).Однако даже если я перенаправлю их в Logout.aspx за 1 минуту до того, как их билет предположительно истекает, иногда Logout.aspx не видит их как аутентифицированных, и они затем перенаправляются на страницу входа.Конечно, они входят в систему, а затем сразу же перенаправляются на страницу выхода и выходят из системы.

Есть ли способ зарегистрировать обработчик, чтобы он не участвовал в FormsAuthentication.Я предполагаю, что это легко, может быть, с помощью настроек IIS?Мы используем IIS7.Есть предложения?

Мой web.config:

<handlers>
    <add name="Logout" verb="*" path="Logout.aspx" type="MyNamespace.HttpHandlers.LogoutHandler"/>
</handlers>

Мой код:

namespace MyNamespace.HttpHandlers
{
    public class LogoutHandler : IHttpHandler, IRequiresSessionState
    {
        public bool IsReusable
        {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context)
        {
            string[] myCookies = context.Request.Cookies.AllKeys;
            foreach (string cookie in myCookies)
                context.Response.Cookies[cookie].Expires = DateTime.Now.AddDays(-1);
            FormsAuthentication.SignOut();
            context.Session.Abandon();
            context.Response.Redirect(Settings.Default.MyRootURL);
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

добавьте что-то подобное в ваш web.config <configuration> раздел

<location path="Logout.ashx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
</location>

, что позволит как авторизованным, так и анонимным пользователям получить доступ к Logout.ashx

0 голосов
/ 22 июня 2011

Как вы выходите из системы, можем ли мы увидеть код из Logout.aspx? Обычная практика состоит в том, чтобы эти две строки в событии Page_Load:

Session.Abandon();
FormsAuthentication.SignOut();
...