Добавьте это в ваш global.asax
protected void Application_Start(object sender, EventArgs e)
{
Application["sessions"] = new List<HttpSessionState>();
}
protected void Session_Start(object sender, EventArgs e)
{
var sessions = (List<HttpSessionState>)Application["sessions"];
sessions.Add(this.Session);
}
protected void Session_End(object sender, EventArgs e)
{
var sessions = (List<HttpSessionState>)Application["sessions"];
sessions.Remove(this.Session);
}
Теперь вы можете перебирать свои сессии следующим образом
var sessions = (List<HttpSessionState>)Application["sessions"];
foreach (var session in sessions)
...
Чтобы убить другие сеансы, вы можете проверить метод Session_Start
, чтобы старый сеанс отказался от него. Это может выглядеть примерно так.
protected void Session_Start(object sender, EventArgs e)
{
var userId = (int)this.Session["userId"];
foreach (var session in sessions)
if ((int)session["userId"] == userId)
session.Abandon();
var sessions = (List<HttpSessionState>)Application["sessions"];
sessions.Add(this.Session);
}