【问题标题】:Asp.net System.Web.HttpContext.Current.Session null in global.asaxAsp.net System.Web.HttpContext.Current.Session 在 global.asax 中为空
【发布时间】:2008-11-16 00:10:19
【问题描述】:

我在 global.asax 中为当前线程设置了一个自定义安全主体对象,一切都很好,正常没有问题。

但是,我只是通过让页面提供图像来添加动态图像功能,并且每当加载该动态图像页面时 System.Web.HttpContext.Current.Session 在 global.asax 中为空,这阻止了我将安全主体设置为正常并从那时起级联问题。

通常会话在 global.asax 中只有一次在用户登录开始时的会话期间为空,之后它始终可用,但只有这个例外。

当浏览器在原始页面中遇到图像标签时加载动态图像页面,即

我猜这是浏览器请求该页面而没有发送一些凭据这一事实的某个方面?

任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net session null global-asax


    【解决方案1】:

    约翰,

    我假设您正在为处理程序使用 ashx 处理程序。如果是这样,请确保从 IRequiresSessionState 派生例如:

    public class Images : IHttpHandler, System.Web.SessionState.IRequiresSessionState
    { }
    

    如果您不使用 ashx,您能描述一下动态图像页面的含义吗?

    乔什

    【讨论】:

    • 嗨乔希,你现在是我最喜欢的人! :) 不,我使用的是标准的 aspx 页面,因为所有关于使用文件扩展名和配置更改的处理程序的示例,根本不知道 ashx,尝试过,它确实需要你提到的派生。完美运行。干杯!
    • 嘿,太棒了!我喜欢 ashx 处理程序。我用一个从数据库中提取图像,效果非常好。我还发现,如果您进行 POX 服务,ashx 的效果会非常好。
    【解决方案2】:

    在 Global.asax.cs Session_Start() 和 Session_End() 你需要使用 "this.Session" !! 这样做的原因是 HttpContext 仅在有正在处理的请求时可用。这就是为什么您在 HttpContext.Current.Session 上获得 NULL!

    来自微软网站: “HttpContext 类:封装有关单个 HTTP 请求的所有 HTTP 特定信息。”

    但不要难过......我也爱上了这个! :)

    【讨论】:

      【解决方案3】:

      会话与是否登录无关。

      当您想要访问会话时,您要覆盖什么事件?在 AcquireRequestState 被触发之前,会话不可用。

      欲了解更多信息,请参阅:http://msdn.microsoft.com/en-us/library/9ysfzy8h.aspx

      【讨论】:

      • 会话与我的自定义业务原则有关。问题在于该会话仅针对这一页为空,这个大型应用程序中的 50 个左右的其他页面没有出现此问题。我从通常不是问题的 Application_PostAuthenticateRequest 访问 Session。
      • 为了这个问题,忽略整个业务主体部分,根本问题是Session仅针对这一类型的页面为空。
      • Jon 这是什么类型的页面?这是一个aspx吗?还是 ashx?
      【解决方案4】:

      是的,你是对的,这是因为对象依赖性可能会在其他页面传输并行的情况下发生冲突,这可能会破坏会话之间的防火墙

      【讨论】:

        猜你喜欢
        • 2021-05-30
        • 1970-01-01
        • 2016-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-27
        相关资源
        最近更新 更多