14

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

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

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

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

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

任何帮助将不胜感激。

4

4 回答 4

25

约翰,

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

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

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

乔什

于 2008-11-16T02:13:56.120 回答
8

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

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

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

于 2009-03-29T06:48:14.307 回答
3

会话与是否登录无关。

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

有关详细信息,请参阅:http: //msdn.microsoft.com/en-us/library/9ysfzy8h.aspx

于 2008-11-16T01:05:24.573 回答
0

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

于 2009-02-16T08:28:56.340 回答