我可以创建一个从不参与表单身份验证的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);
}
}
}
在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();