Отказ от ответственности: я просто придумала эту реализацию, потому что я думала, что это интересная и разрешимая проблема. Таким образом, могут быть некоторые проблемы или детали, которые я не учел. Тем не менее, если вы используете InProc состояние сеанса, вот решение.
Сводка: создайте объект уровня приложения (например, список), сохраненный в состоянии приложения, созданный во время события Application_Start
, и при каждом событии Session_Start
добавьте ссылку на сеанс в свой список. На Session_End
удалите его. Чтобы получить все активные сеансы и значения, выполните цикл по списку сеансов, а затем по ключам сеансов каждого.
Global.asax
void Application_Start(object sender, EventArgs e)
{
Application["activeSessions"] = new System.Collections.Generic.List<HttpSessionState>();
}
void Session_Start(object sender, EventArgs e)
{
var activeSessions = (System.Collections.Generic.List<HttpSessionState>)Application["activeSessions"];
activeSessions.Add(this.Session);
}
void Session_End(object sender, EventArgs e)
{
var activeSessions = (System.Collections.Generic.List<HttpSessionState>)Application["activeSessions"];
activeSessions.Remove(this.Session);
}
SomePage.aspx
//add something to session for test
this.Session["someStr"] = DateTime.Now.ToString();
//get sessions
var activeSessions = (List<HttpSessionState>)Application["activeSessions"];
foreach (var session in activeSessions)
{
Response.Write("Session " + session.SessionID + "<br/>");
foreach (string key in session.Keys)
{
Response.Write(key + " : " + session[key] + "<br/>");
}
Response.Write("<hr/>");
}
Вывод: (после загрузки второго браузера, чтобы попасть на страницу)
Session sj0sa255uizwlu45zivyfg2m
someStr : 8/28/2009 11:03:37 AM
----
Session 530b3sjtea22jm451p15u355
someStr : 8/28/2009 11:03:43 AM
----