如何传输ASP.NET会话状态对象?

如何传输ASP.NET会话状态对象?,asp.net,session-state,sessionid,Asp.net,Session State,Sessionid,为了减轻潜在的会话固定/捕获攻击,我们需要能够在用户成功登录后将ASP.NET会话状态从一个会话Id转移到另一个会话Id。用户在登录之前有需要传输的重要会话信息,因此我们不能只调用session.adward或Response.Cookies.Add(new-HttpCookie(“ASP.NET_SessionId”),因为所有会话状态都已丢失。我们可以使用System.Web.SessionState.SessionIDManager调用CreateSessionID(),然后使用SaveS

为了减轻潜在的会话固定/捕获攻击,我们需要能够在用户成功登录后将ASP.NET会话状态从一个会话Id转移到另一个会话Id。用户在登录之前有需要传输的重要会话信息,因此我们不能只调用session.adward或Response.Cookies.Add(new-HttpCookie(“ASP.NET_SessionId”),因为所有会话状态都已丢失。我们可以使用System.Web.SessionState.SessionIDManager调用CreateSessionID(),然后使用SaveSessionID()生成一个新ID,但同样,在下一个请求中先前的状态会丢失。因此,我的问题基本上是如何将会话状态从登录前会话Id转换为登录后会话Id。

有多篇文章和帖子解释了使用会话状态的潜在问题。最明显的问题是对多服务器环境的支持存在问题

如果将当前放入会话[]中的项目存储在数据库中,或者使用基于SQL的会话,“传输”只是将用户或连接与特定记录集相关联的问题


如果您绕过Session对象,自己处理所有事情(如果您想要维护simple Session[]key-value接口,这是一项微不足道的任务),您将获得许多好处,例如在会话之间和应用程序之间保持不变的设置(只要它们共享一个公共数据库).

您有6个问题,没有公认的答案。请接受您的一些问题的最佳答案,以便激励人们解决您的问题。是否要求在用户登录时启动新会话?会话和身份验证不相关。是的,潜在会话固定的确切问题是会话Id在身份验证后不会更改。我们没有使用forms auth来利用auth令牌的存在(这实际上就像成功登录后的新会话Id一样)。为什么用户登录时不能再使用会话?由于我们的代码库的大小,重构对HttpContext.Current.session[key]=value的所有调用将是一项艰巨的任务,以使用自定义会话状态管理器。使用数据库绝对是临时存储序列化对象的一种选择,但它被认为是最后的选择。我正在寻找某种方法,使用SessionState本身临时存储或缓存序列化对象。我寻找了一种创建占位符会话和传输对象的方法,但找不到如何做到这一点。