是否可以使用ASP.NET为会话生成新ID?
我希望在我设置初始会话变量之前登录我的网站时进行更改。
答案 0 :(得分:25)
您可以使用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's article]
答案 1 :(得分:4)
你可以使用
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:Changing the session ID programmatically.
的完整详细信息答案 2 :(得分:3)
是的,可以为会话生成新的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 : ");
}
答案 3 :(得分:3)
ASP.Net会话管理基础结构在处理请求期间不会公开支持的更改会话ID的方法。如果编写支持的代码对您很重要,那么接受的答案有几点需要注意。
CreateSessionID
和SaveSessionID
都是marked“此方法无意从应用程序代码中调用”。HttpContext
的会话状态将保持与初始会话ID相关联,因此您放入会话状态包中的任何内容都将显示为丢失。因为一旦你改变了你的身份,你就无法对会话做任何事情,以这种方式改变你的身份毫无意义。不幸的是,如果没有往返,就没有一种支持的方法可以做到这一点。您需要做的是在生成登录表单时擦除会话状态cookie。当用户提交表单时,框架将调用SessionIDManager
以生成新表单。正确擦除会话cookie比大多数代码示例显示的要复杂一些。 cookie名称是web.config中可配置的另一个参数。您需要通过访问属性从配置中读取它:
((System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState")).CookieName
会话ID cookie没有作用于应用程序,因此如果在同一台服务器上安装了两个应用程序,通常需要让它们使用不同的cookie名称,因此这需要比您想象的更常见。
答案 4 :(得分:2)
我认为这与安全有关吗? Session.Clear()
或Session.Abandon()
会为您效力吗? This is a good SO link与这些方法有关。
否则,很难,因为ASP.NET会话cookie已经在用户的浏览器上。您可能无法确信会话确实已更改。