如何获取所有当前会话的ID?
获取会话ID,可以这样做:
// In a user control or page
string sessionId = this.Session.SessionID;
// In a normal class, running in a asp.net app.
string sessionId = System.Web.HttpContext.Current.Session.SessionID;
您不需要:
在无Cookie的情况下,当您首次访问Session对象时,会创建会话ID。这不应该太重要,因为一旦访问SessionID属性,会话对象就被访问了。
欲了解更多信息,请参阅:
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx
注意:msdn上的示例是由猴子编写的。
您可以使用Global.asax
文件并在Session_Start
事件中设置会话。请参见以下内容
在Global.asax
文件中,您可以执行以下操作:
protected void Session_Start(object sender, EventArgs e)
{
Session["sid"] = Session.SessionID;
Session["sid"] = "Test";
}
然后在您的Web表单中,您可以像下面这样获取Session ID和值:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Session ID is:" + Session.SessionID.ToString()+ "<br/>");
Response.Write("Session value is:" + Session["sid"].ToString());
}
DataTable dt = new DataTable();
dt.Columns.Add("SessionID", typeof(string));
foreach(DictionaryEntry elem in Cache) {
string s = elem.Key.ToString();
if (s.StartsWith("System.Web.SessionState.SessionStateItem")) {
DataRow row = dt.NewRow();
char[] parms = {':'};
string[] a = s.Split(parms);
row["SessionID"] = a[1];
dt.Rows.Add(row);
}
}
static List<string> sessions = new List<string>();
static object sessionLock = new object();
void Application_SessionStart()
{
lock (sessionLock) {
sessions.Add(Session.SessionID);
}
}
void Application_SessionEnd()
{
lock (sessionLock) {
sessions.Remove(Session.SessionID);
}
}
您也可以使用词典,将会话ID存储为键,该用户的额外数据存储为值。然后,您可以轻松地创建一个页面,显示所有当前用户会话,例如,用于管理员网站显示当前用户会话。
仅当您的会话为InProc时,才会调用SessionEnd。
答案部分取决于您存储会话状态的位置。假设您使用默认设置(inproc),则可以使用global.asax中的Session_Start
和Session_End
事件维护当前会话ID列表。