ASP.NET网站HttpContext.Items在HTTPHANDLER中随机为空

时间:2011-07-04 00:39:08

标签: c# asp.net forms-authentication httphandler httpcontext

有时在调用Http Handler时访问HttpContext.Items [typeof(UserProfile)]对象时遇到问题,其中UserProfile是通过表单身份验证存储在会话cookie中的对象。

当我在Visual Studio中部署或调试的同一台机器上打开浏览器时,它有100%的工作时间,但是当我从远程计算机进行测试时它会随机失败。根据fiddler的说法,我进行了一些跟踪,基本上HttpContext.Items [typeof(UserProfile)]即使成功传递了Session Cookie也是null。

我已经尝试在HTTPHandler中实现IReadOnlySessionState但它仍然不起作用。我确实意识到有时候,在登录3分钟或更长时间之后,它会在此之后100%的时间内工作。

关于为什么会发生这种情况和解决方案的任何想法?

THX

1 个答案:

答案 0 :(得分:0)

会话状态,表单身份验证和HttpContext.Items都不相关 - 所以不确定为什么要将它们混合起来。表单身份验证具有与会话cookie分开的自己的cookie,其生命周期可能不同。无论用户是否经过身份验证,您都可以拥有会话状态。我也不确定如何在会话cookie中存储UseProfile对象 - 建议放置一些代码。

HttpContext.Items是与每个HttpRequest关联的属性包 - 请注意,此集合仅适用于请求生命周期,并且没有内置机制来保留集合。因此,除非您将某个模块或global.asax中的每个请求放在那里,否则您不太可能在此集合中获取UserProfile对象。您需要使用代码示例来解释您正在做什么!