Csharp Session Management

StefanR

Erfahrenes Mitglied
Hallo,

ich bin gerade dabei mich in CSharp einzuarbeiten, bisher gefällt mir das sehr gut obwohl ich ursprünglich aus dem PHP Bereich komme. ;)

Jetzt hab ich da ein leichtes Verständnisproblem. Und zwar bastel ich an einer kleinen Applikation, welche ein Login Formular zur Verfügung stellen soll, wenn kein Nutzer angemeldet ist, ist einer angemeldet, soll der eigentliche Spaß beginnen. Die Nutzerdaten liegen in einer MySQL Datenbank und die Kommunikation zwischen Server und Klient passt auch schon nur halt wie gesagt, wie und wo ich speichern kann, wer gerade angemeldet ist und ob überhaupt jemand angemeldet ist, weiß ich grad net.

Wie könnte man das am Besten/Simpelsten lösen?

Beste Grüße STefan
 
Hallo,

1.Einen Nutzer einloggen

Am einfachsten ist es folgendermaßen. Der Nutzer gibt Name+Passwort ein. Danach wird ein SELECT ausgeführt
Code:
"SELECT mitgliedernummer FROM mitglieder WHERE name=@name AND passwort=@passwort;"
Wenn das SELECT einen Datensatz liefert, logst du den Nutzer so ein:
Code:
HttpContext.Current.Session.Add("mitgliedernummer",>>Hier die ausgelesene id des Nutzers als string, int oder als anderes object(DataTable,DataRow....)<<).
Überprüfen ob oder eingeloggt ist:
Code:
if(HttpContext.Current.Session["mitgliedernummer"]!=null)


2.Sehen wer alles eingeloggt ist

Ich mache das zurzeit mit der mysql-Datanbank. Dort hab ich in der Mitgliedertabelle eine Spalte "lastactivity" als datetime, welche bei jedem Seitenaufruf auf NOW() gesetzt wid. Dann kann man alle Nutzer auslesen, welche in den letzten Minuten online waren.

Denkbar wäre es auch, die Daten im Anwendungsspeicher zu speichern. Anders als bei Sessions, hat hier jeder Client Zugriff. Also mach bei jedem Seitenaufruf folgendes:
Code:
if(HttpContext.Current.Session["mitgliedernummer"]!=null)
{
HttpContext.Current.Cache.Remove(HttpContext.Current.Session["mitgliedernummer"].ToString());     
HttpContext.Current.Cache.Add(HttpContext.Current.Session["mitgliedernummer"].ToString(), null, null, null, new TimeSpan(0, 0, 30), System.Web.Caching.CacheItemPriority.Default, null);
}
Im oberen Beispiel wird ein Eintrag im Anwendungsspeicher erstellt. Der Key ist dabei die ID des Mitgliedes. Einen Inhalt hat der Eintrag nicht (null). Außerdem zerfällt der Eintrag nach 30 Sekunden (das Timespan Objekt). Jetzt kannst du ganz einfach von jedem Client aus überprüfen, ob ein anderen Nutzer eingeloggt ist, indem du überprüfst, ob im Anwendungsspeicher ein Eintrag vorhanden ist.

Gruß
 

Neue Beiträge

Zurück