如何生成新的会话ID

是否可以使用ASP.NET为会话生成新ID?

当我在设置初始会话变量之前登录我的网站时,我希望它能够改变。

您可以使用SessionIdManager类执行此操作:

SessionIDManager manager = new SessionIDManager(); string newID = manager.CreateSessionID(Context); bool redirected = false; bool isAdded = false; manager.SaveSessionID(Context, newID, out redirected, out isAdded); 

[代码示例来自Anas Ghanem的文章]

您可以使用

SessionIDManager.CreateSessionID Method :返回唯一的会话标识符,该标识符是随机生成的编号为24个字符的字符串。

 SessionIDManager Manager = new SessionIDManager(); string NewID = Manager.CreateSessionID(Context); string OldID = Context.Session.SessionID; bool redirected = false; bool IsAdded = false; Manager.SaveSessionID(Context, NewID,out redirected, out IsAdded); 

在这里您可以找到有关hsi的完整详细信息: 以编程方式更改会话ID。

是的,可以为会话生成新的ID。 下面是一个例子

 SessionState.SessionIDManager Manager = new SessionState.SessionIDManager(); string NewID = Manager.CreateSessionID(Context); string OldID = Context.Session.SessionID; bool IsAdded = false; Manager.SaveSessionID(Context, NewID, false, IsAdded); Response.Write("Old SessionId Is : " + OldID); if (IsAdded) { Response.Write("<br/> New Session ID Is : " + NewID); } else { Response.Write("<br/> Session Id did not saved : "); } 

我认为这与安全有关吗? Session.Clear()Session.Abandon()是否适合您? 这是与这些方法相关的良好SO链接 。

否则,很难,因为ASP.NET会话cookie已经在用户的浏览器上。 您可能无法确信会话确实已更改。

ASP.Net会话管理基础结构不会公开在处理请求期间更改会话ID的受支持方式。 如果编写支持的代码对您很重要,那么接受的答案有几点需要注意。

  • CreateSessionIDSaveSessionID都标记为 “此方法不应从应用程序代码调用”。
  • SessionID提供程序是可插入类型(请参阅实现自定义SessionIDManager ),因此至少需要实例化正确的类型。
  • 附加到HttpContext的会话状态将保持与初始会话ID相关联,因此您放入会话状态包中的任何内容都将显示为丢失。 因为一旦你改变了你的身份,你就无法对会话做任何事情,以这种方式改变你的身份毫无意义。

不幸的是,如果没有往返,就没有一种支持的方法可以做到这一点。 您需要做的是在生成登录表单时擦除会话状态cookie。 当用户提交表单时,框架将调用SessionIDManager以生成新的表单。 正确擦除会话cookie比大多数代码示例显示的要复杂一些。 cookie名称是web.config中可配置的另一个参数。 您需要通过访问属性从配置中读取它:

 ((System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState")).CookieName 

会话ID cookie不限于应用程序,因此如果在同一服务器上安装了两个应用程序,通常需要让它们使用不同的cookie名称,因此这需要比您想象的更常见。