Die in ASP.NET integrierten SQL-Membership- und Profile-Provider sind schon eine feine Sache. Sie bieten vom Start weg eine Menge Funktionalitäten,
die dem Entwickler das Leben erleichtern. Vor allem der Profile-Provider ist sehr effektiv: man deklariert in der web.config ein neues
Feld und kann es direkt verwenden, um die Stammdaten eines Benutzers um eigene Felder zu erweitern.
Der Membership-Provider bietet, neben der Verwaltung der Benutzer, einige Zusatzfunktionen, um den Status eines Benutzers abzufragen, wie
IsOnline oder GetNumberOfUsersOnline, die sich zum Beispiel gut dafür eignen auf einer Administrationseite anzuzeigen
welche User gerade angemeldet sind. Bezugspunkt für diese beiden Eigenschaften bzw. Methoden ist das Feld LastActivityDate,
in dem die letzte Aktivität des Users festgehalten wird, und die Membership-Eigenschaft UserIsOnlineTimeWindow.
Aus der Differenz errechnet sich, ob ein Benutzer noch online ist oder vielleicht nicht (ASP.NET ist halt zustandslos).
Problem
Beim Einsatz des Profile-Providers gibt es dabei allerdings einen Haken: sobald auf ein Profil-Feld zugegriffen wird, aktualisiert der
Provider das LastActivityDate des dazugehörigen Benutzers! Das ist das Phänomen, dass vielleicht einige Admins kennen. Man lädt
die User-Liste mit zusätzlichen Informationen aus dem Profil und scheinbar sind alle User gerade online...