1

我创建了一个注销处理程序,该处理程序在我的 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);
        }
    }
}
4

2 回答 2

2

将这样的内容添加到您的 web.config<configuration>部分

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

这将允许 Authenticated 和 Anonymous 用户访问 Logout.ashx

于 2011-06-22T15:59:09.450 回答
0

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

Session.Abandon();
FormsAuthentication.SignOut();
于 2011-06-22T16:01:10.543 回答