这个问题与this one有关,虽然我觉得我有点太啰嗦到那里真的得到了一个好的答案。我会保持简短。
我正在处理一个Web处理程序(ashx),它接受来自aspx页面的表单帖子。当处理程序收到此表单帖子时,为了完成它需要做的事情,它需要知道登录的用户(User.Identity.Name),但我不能依赖浏览器发送的cookie。
我知道我可以获取Session.SessionID并将其放在隐藏的表单字段中,但是一旦我的处理程序收到表单帖子,我如何使用该SessionID来确定登录用户的身份?
我正在使用StateServer模式进行会话状态。
答案 0 :(得分:3)
我认为你可以在你的HttpHandler上实现IReadOnlySessionState接口
答案 1 :(得分:2)
Jonas在这里发表了一个很好的答案:
答案 2 :(得分:1)
除非需要直接使用会话,否则您始终可以在单例字典或缓存中存储有关登录用户身份的任何信息,并通过存储在隐藏字段中的SessionID引用它。我个人在这方面看到了安全问题,但不会涉及到这些问题。我会考虑为这种类型的实现发布单一使用身份。
答案 3 :(得分:0)
在HttpHandler或HttpModule实现中,您无法始终从BeginRequest事件访问会话。您可以处理另一个事件,称为OnAcquireRequestState。如果您在该事件中编写代码,则HttpContext.Current.Session将不为null。