Frage

Ich möchte in der Lage sein, zu töten, die vorhandenen Sitzungen, die für den gleichen Benutzernamen, wenn sich jemand anmeldet, um zu verhindern, dass mehrere Menschen mit dem gleichen login.

Gibt es eine Möglichkeit zu Durchlaufen vorhandenen Sitzungen und töten Sie Sie?

War es hilfreich?

Lösung

Fügen Sie diese auf Ihrer 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);
}

Jetzt können Sie durch Ihre Sitzungen wie diese iterieren

var sessions = (List<HttpSessionState>)Application["sessions"];

foreach (var session in sessions)
       ...

Um andere Sitzungen zu töten in Sie in der Session_Start Methode für die alte Sitzung es verlassen überprüfen konnten. Das könnte wie folgt aussehen.

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

Andere Tipps

Sie können die protokollierten Benutzer-Datenbank speichern und überprüfen, ob sie bereits angemeldet haben, können sie verhindern, dass sich wieder anmelden. mit der Session_Start Methode unter Global.asax.

Kurze Antwort: nein.

Lange Antwort: Sie müssen Ihre eigenen Session-Provider implementieren. Es gibt keine Möglichkeit für eine Sitzung andere Sitzung, aus Sicherheitsgründen zu verweisen. Sie würden um zu gehen und Ihr eigenes Session-Management zu implementieren.

Das eine mal, als ich realisiert das ich gespeicherte Benutzer-ids (oder etwas einzigartiges) in einer Anwendung variable, ein Wörterbuch oder ein Array.Es ist leicht zu überprüfen die für die Existenz von Benutzer-ID in der Anwendung Wörterbuch im log-in-time.Die einzige wirkliche Frage ist, Menschen, die nicht Abmelden und nur den browser schließen.Sie finden nie eine gute zuverlässige Möglichkeit zu erkennen, dieser Veranstaltung.

Aus der Manschette:

Auf Session_Start (in der Regel eine erfolgreiche Anmeldung), im Speicher des Benutzer Benutzer-ID und SessionID in einer Lookup-Tabelle (oder ein neue Spalte in der Tabelle user).

Auf jeder Anforderung müßten Sie bestätigen, dass die Benutzer-ID (in Session gespeichert) und SessionID die Werte in der Lookup-Tabelle als Authentifizierungsschritt gespeichert entsprechen.

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