ASP.Net:如果我具有会话ID,可以获取会话对象吗?

ASP.Net:如果我具有会话ID,可以获取会话对象吗?

ASP.Net: If I have the Session ID, Can I get the Session object?

这个问题与这个问题有关,尽管我认为我在这个问题上花了太长的时间才能真正得到一个好的答案。 我会保持简短。

我正在研究一个Web处理程序(ashx),该处理程序接受来自aspx页面的表单发布。 处理程序收到此表单发布后,为了执行它需要做的事情,它需要知道已登录的用户(User.Identity.Name),但我不能依靠浏览器发送的cookie。

我知道我可以获取Session.SessionID并将其放置在隐藏的表单字段中,但是一旦我的处理程序收到表单发布,我如何使用该SessionID来确定已登录用户的身份?

我正在使用StateServer模式进行会话状态。


我认为您可以通过在HttpHandler上实现IReadOnlySessionState接口来实现


乔纳斯(Jonas)在这里对这个问题发表了一个很好的答案:

我可以将ASP.Net会话ID放在隐藏的表单字段中吗?


除非需要直接使用会话,否则您始终可以将有关登录用户身份的任何信息存储在单例字典或缓存中,并通过存储在隐藏字段中的SessionID进行引用。 我个人看到了安全问题,但不会涉及这些问题。 我会考虑为这种类型的实现发布单次使用身份。


在HttpHandler或HttpModule实现中,您不能始终从BeginRequest事件访问会话。 您可以处理另一个事件,称为OnAcquireRequestState。 如果您在该事件中编写代码,则HttpContext.Current.Session将不会为null。


推荐阅读