我可以创建一个从不参与表单身份验证的HttpHandler吗

本文关键字:表单 身份验证 HttpHandler 创建 一个 我可以 | 更新日期: 2023-09-27 17:59:53

我创建了一个注销处理程序,该程序已在web.config中注册到logout.aspx。我希望它能够从任何路径运行。它非常有效。我的主页注册了一个客户端脚本函数,该函数在票证或会话到期前1分钟自动将用户注销(他们在还剩2分钟时收到倒计时警告)。然而,即使我在他们的票证到期前1分钟将他们重定向到Logout.aspx,有时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);
        }
    }
}

我可以创建一个从不参与表单身份验证的HttpHandler吗

在web.config <configuration>节中添加类似内容

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

这将允许经过身份验证的用户和匿名用户访问Logout.ashx

如何注销用户,我们可以从Logout.aspx中看到代码吗?常见的做法是在Page_Load事件中有这两行:

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