2011-06-22 50 views
1

我创建了一个注销处理程序,该注册处理程序在我的web.config中注册到Logout.aspx。我希望这能够从任何路径运行。它效果很好。我的主页面注册了一个客户端脚本功能,可以在他们的票证或会话即将到期前1分钟自动记录人员(他们会在2分钟后开始倒计时警告)。然而,即使我们将他们重定向到Logout.aspx之前1分钟,他们的票据即将到期,有时Logout.aspx不会将其视为已验证,然后重定向到登录页面。当然,他们会登录,然后立即重定向到注销页面并注销。我可以创建一个从不参与表单身份验证的HttpHandler吗?

有没有办法注册一个处理程序,所以它不参与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); 
     } 
    } 
} 
+0

没有必要在标题中放入“ASP.NET/C#”。这就是我们在这里的标签。 –

回答

2

添加这样的事情你的web.config <configuration>部分

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

这将使身份验证和匿名用户访问Logout.ashx

+0

我相信我试过了。这不是特定的路径。由于它是可以从任何路径调用的通用处理程序,因此我需要未知数量的路径:Root/Logout.aspx,Root/Folder1/Logout.aspx,Root/Folder2/Logout.aspx等。 –

+0

我一直在试图解决这个问题,以及这是唯一的解决方案,有任何真正的效果,但在我的情况下,我有一个通用的处理程序的任何数量的不存在的文件,我的httpHandler类生成响应。我将尝试使用404处理程序来查看是否可以继续使用它。 –

0

你如何登录用户,我们可以看到来自Logout.aspx的代码吗?常见的做法是在Page_Load事件中使用这两行:

Session.Abandon(); 
FormsAuthentication.SignOut(); 
相关问题