Вопрос

Я изменяю сайт Castle-Monorail, который я унаследовал и обнаружил, что было бы полезно увидеть список онлайн-пользователей в настоящее время. В настоящее время существуют фильтры, которые определяют, кто может получить доступ к тому, к каким частям сайта я могу различить регистрацию в сеансах от не-логированных в сессиях. Есть ли простой способ получить список активных сессий, чтобы я мог покончить с тем, кто вошел в систему?

Это было полезно?

Решение 2

Вот решение, с которым я закончил:

(С помощью: https://stackoverflow.com/q/1470571/126785 и комментарии Кена Эгози)

В 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");

Теперь мне просто нужно выработать лучшее место, чтобы обновить местоположение. Звонки из каждой функции могут быть немного утомительными!

Другие советы

Я полагаю, что нет простого способа, если вы не храните информацию о входе в систему пользователя в базе данных или переменной приложения, вы не можете знать, сколько существует активные сеансы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top