Получить текущие сессии для сайта Castle-Monorail?
Я изменяю сайт Castle-Monorail, который унаследовал, и обнаружил, что было бы полезно увидеть список пользователей, которые в данный момент находятся в сети. В настоящее время существуют фильтры, которые определяют, кто может получить доступ к каким частям сайта, чтобы я мог отличить зарегистрированные сеансы от незарегистрированных сеансов. Есть ли простой способ получить список активных сессий, чтобы я мог определить, кто вошел в систему?
2 ответа
Вот решение, которое я выбрал:
(С помощью: /questions/17650895/spisok-vseh-aktivnyih-sessij-aspnet и комментариев Кена Эгози)
В Global.asax.cs:
private static readonly object padlock = new object();
private static Dictionary<string,SessionData> sessions = new Dictionary<string,SessionData>();
public static Dictionary<string, SessionData> Sessions
{
get { lock (padlock) { return sessions; } }
}
public struct SessionData
{
public string Name { get; set; }
public int AccountId { get; set; }
public string CurrentLocation { get; set; }
}
protected void Session_Start(object sender, EventArgs e)
{
Sessions.Add(Session.SessionID, new SessionData());
}
protected void Session_End(object sender, EventArgs e)
{
Sessions.Remove(Session.SessionID);
}
public static void SetSessionData(string sessionId, int accountId, string name, string currentLoc)
{
Sessions.Remove(sessionId);
Sessions.Add(sessionId, new SessionData { AccountId = accountId, CurrentLocation = currentLoc, Name = name });
}
public static void SetCurrentLocation(string sessionId, string currentLoc)
{
SessionData currentData = Sessions[sessionId];
Sessions.Remove(sessionId);
Sessions.Add(sessionId, new SessionData { AccountId = currentData.AccountId, CurrentLocation = currentLoc, Name = currentData.Name });
}
Тогда при входе в систему:
Global.SetSessionData(((HttpSessionStateContainer)Session.SyncRoot).SessionID,account.Id,account.Name,"Logged In");
Теперь мне просто нужно найти лучшее место для обновления местоположения. Вызовы из каждой функции могут быть немного утомительными!
Я полагаю, что не существует простого способа, если вы не сохраните информацию о входе пользователя в базу данных или переменную приложения, вы не сможете узнать, сколько там активных сессий.