【问题标题】:SessionState not being preserved in Handlers [duplicate]处理程序中未保留 SessionState [重复]
【发布时间】:2011-10-04 22:35:54
【问题描述】:

可能重复:
Can I access session state from an HTTPModule?

我已经设置并正在使用 SQLServer 状态处理,它在我的项目中运行良好。但是我有共享资源文件,它提供了从数据库加载图像的处理程序等。在这个模块中,会话总是空的。我尝试了以下方法:

  1. Session 变量的完整路径,即 HttpContext.Current.Session["varname"];
  2. 我已将 sessionState 行添加到具有处理程序的用户控件文件的 web.config 中,就像我为主项目所做的那样。

还有什么东西可以让模块中的会话变量可用吗?我对 .net 比较陌生,所以我可能使用了不正确的术语。明确一点,我定义了一个“解决方案”。在这个解决方案中是一个名为 CMS 的“项目”。解决方案中还有另外两个项目——一个用于处理共享类,一个用于处理程序。这些外部文件通过引用包含在主项目中(当然,或者根本不起作用)。正是在这些“外部”项目中,我似乎无法访问 Session 变量。

非常感谢任何帮助。哦,虽然我对 RTFM 类型的响应很好,但我之前提出的问题指向我冗长的理论 MSDN 文档,这些文档很少有帮助,因为它们对我的理解来说太深了。试着让兄弟休息一下吧?

【问题讨论】:

标签: c# asp.net session-state


【解决方案1】:

您需要在类声明中使用 IReadOnlySessionState 或 IRequiresSessionState 接口,如下所示:

public sealed class MyHandler : IHttpHandler, IReadOnlySessionState {

【讨论】:

  • IRequiresSessionState 不起作用,但 IReadOnlySessionState 起作用了!谢谢!
  • IRequiresSessionState 工作正常,一定是其他原因对你不起作用。
  • 是的,可能是错字。无论如何,我只想读取变量,这样就可以了。
【解决方案2】:

不确定你的是 IHttpHandler 还是 IHttpModule,因为你使用了这两个术语。

对于 Handlers,如果你需要 Session 可用,你还需要实现 IRequireSessionState。

如果您想在 HttpModule 中访问会话状态,请务必将 EventHandler 添加到 HttpApplications PreRequestHandlerExecute”事件,而不是“BeginRequest”事件。

也看看 Can I access session state from an HTTPModule?

【讨论】:

  • 谢谢。我实际上正在使用两者。这个链接有帮助!
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2015-11-08
  • 1970-01-01
  • 2011-09-20
  • 2021-10-09
相关资源
最近更新 更多