Frage

Ich ändere eine Castle-Monorail-Site, die ich geerbt habe, und stellte fest, dass es nützlich wäre, eine Liste der derzeit Online-Benutzer zu sehen. Derzeit gibt es Filter, die bestimmen, wer auf welche Teile der Website zugreifen kann, damit ich in Sitzungen in Sitzungen in Sitzungen abgeholt werden kann. Gibt es eine einfache Möglichkeit, eine Liste aktiver Sitzungen zu erhalten, damit ich dann herausfinden kann, wer angemeldet ist?

War es hilfreich?

Lösung 2

Hier ist die Lösung, mit der ich gekommen bin:

(Mit Hilfe von: https://stackoverflow.com/q/1470571/126785 und Ken Egozis Kommentare)

In 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 });
}

Dann beim Anmelden::

Global.SetSessionData(((HttpSessionStateContainer)Session.SyncRoot).SessionID,account.Id,account.Name,"Logged In");

Jetzt muss ich nur noch den besten Ort zum Aktualisieren des Standorts herausfinden. Anrufe aus jeder Funktion könnten etwas lästig sein!

Andere Tipps

Ich glaube, es gibt keinen einfachen Weg, es sei denn, Sie speichern Ihre Benutzeranmeldeinformationen in der Datenbank oder eine Anwendungsvariable, können Sie nicht wissen, wie viele aktive Sitzungen es gibt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top