ASP.Net:如果我具有会话ID,是否可以获取会话对象?
时间:2020-03-05 18:51:10 来源:igfitidea点击:
这个问题与这个问题有关,尽管我认为我在这里有点太冗长了,无法真正得到一个好的答案。我会保持简短。
我正在研究一个Web处理程序(ashx),该处理程序接受来自aspx页面的表单发布。处理程序收到此表单发布后,为了执行它需要做的事情,它需要知道已登录的用户(User.Identity.Name),但我不能依靠浏览器发送的cookie。
我知道我可以获取Session.SessionID并将其放置在隐藏的表单字段中,但是一旦我的处理程序收到表单发布,我如何使用该SessionID来确定已登录用户的身份?
我正在使用StateServer模式进行会话状态。
解决方案
回答
我认为我们可以通过在HttpHandler上实现IReadOnlySessionState接口来实现
回答
在HttpHandler或者HttpModule实现中,我们不能始终从BeginRequest事件访问会话。我们可以处理另一个事件,称为OnAcquireRequestState。如果我们在该事件中编写代码,则HttpContext.Current.Session将不会为null。
回答
除非需要直接使用会话,否则我们始终可以将有关登录用户身份的任何信息存储在单例字典或者缓存中,并通过存储在隐藏字段中的SessionID进行引用。我个人认为其中存在安全问题,但不会涉及这些问题。我将考虑为这种类型的实现发布单次使用身份。
回答
乔纳斯(Jonas)在这里对这个问题发表了一个很好的答案:
我可以将ASP.Net会话ID放在隐藏的表单字段中吗?