如何获取所有当前会话的ID?
答案 0 :(得分:51)
要获取会话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示例由猴子编写。
答案 1 :(得分:5)
您可以使用Global.asax
文件并在Session_Start
事件中设置会话。见下文
在Global.asax
文件中,您可以执行以下操作:
protected void Session_Start(object sender, EventArgs e)
{
Session["sid"] = Session.SessionID;
Session["sid"] = "Test";
}
然后在您的WebForm中,您可以获得会话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());
}
有关详细信息,请参阅http://www.dotnetcurry.com/ShowArticle.aspx?ID=126
答案 2 :(得分:3)
根据Dino Esposito,每个会话都存储在应用程序的缓存中,通过一些工作,您可以检索此信息:
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);
}
}
答案 3 :(得分:0)
答案部分取决于您存储会话状态的位置。假设您使用默认值(inproc),那么您可以使用global.asax中的Session_Start
和Session_End
事件维护当前会话ID的列表。
答案 4 :(得分:0)
如果要在SQL Server中存储会话状态,也可以从那里轻松获取它。
答案 5 :(得分:0)
如果您想要一种存储控制后备存储的当前会话列表的方法,以便您可以存储有关客户端的额外数据,则可以使用列表。 (我从头顶写下面的例子)
挂钩到global.asax.cs文件中的Application_SessionStart:
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。