【问题标题】:Authentication in ASP.NET HttpHandlerASP.NET HttpHandler 中的身份验证
【发布时间】:2010-09-01 14:42:00
【问题描述】:

我创建了一个 HttpHandler 与 SWFUpload 一起使用以将图像上传到服务器。此上传是在管理后端完成的,因此用户需要经过身份验证才能上传图片。

最初我让整个管理区域拒绝匿名用户,但由于 SWFUpload 的工作方式,它无法与 Forms 身份验证一起正常工作,并且会返回 302 状态代码。

我原以为可以在 Web.config 中公开我的处理程序的位置,并在我的处理程序中使用 context.User.Identity.IsAuthenticated 来确定用户是否已登录。

我的问题:我登录后处理程序中的context.User.Identity.IsAuthenticated 是否总是错误的。有没有人知道为什么会这样?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    是的,您需要使用IRequiresSessionState

    public class CustomGenericHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
    {
    //code
    }
    

    然后,您的所有会话都可以在通用处理程序中使用。 希望这会有所帮助!

    【讨论】:

    • 似乎对我来说仍然是错误的。也许我在这里做一些奇怪的事情?
    • 如果您使用 FormsAuthentication,则不需要 IRequiresSessionState。仅当您直接访问 Session 时才需要它。
    • FormsAuthentication 也使用会话。 Jason,这很奇怪,因为我必须这样做才能使我的代码正常工作。
    • 会不会是因为在SWFUpload中从客户端调用了handler?
    • 不,因为我是从 jquery ajax 调用它。您能否确保用户已登录,我只是在想有时在开发会话时会在开发人员没有注意到的情况下重新启动 - 所以只需确保用户已登录然后尝试运行它。
    【解决方案2】:

    您在测试时使用哪种浏览器?

    您的解决方案应该在 IE 中工作,但在 FireFox 中会失败,因为 SwfUpload 是基于 Flash 的,并且 Flash 总是将 IE cookie 发送到服务器,因为您在 Firefox 中登录(并因此创建 ASP.NET 会话 cookie)但 SwfUpload 发送一个不同的 cookie 集。

    【讨论】:

    • 我正在使用 IE 进行调试,但它仍然无法正常工作。我还在 SWFUpload 示例中将建议的代码添加到 Global.asax。
    • context.User.Identity.IsAuthenticated 总是假的还是只是在 SwfUpload 请求期间?
    • 仅在 SWFUpload 请求期间。
    【解决方案3】:

    我的问题是特定于添加到 Global.asax 以修复非 IE 浏览器的 SWFUpload cookie 错误的一些代码。我已将 Application_BeginRequest 事件处理程序中 session_cookie_name 变量的值修改为与我在 Web.config 中设置的名称相同。

    这样做会破坏所有浏览器的功能。变量值应设置为其默认值“ASP.NET_SESSIONID”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多