2009-07-15 11 views
0

Ich muss ein CMS entwerfen, wo eine Reihe von Anmeldeinformationen nur einmal verwendet werden kann. Wenn sich ein Benutzer von seinem Computer aus angemeldet hat, kann sich niemand mit seinen Anmeldeinformationen von einem anderen Standort aus anmelden, bis sich dieser Benutzer abmeldet.Korrekte 100% IsOnline-Implementierung für asp.net-Mitgliedschaft

Jetzt, da der ASP.net-Mitgliedschaftsanbieter das Feld verlässt, gibt die IsOnline-Methode einen booleschen Wert zurück, der das Zeitüberschreitungsfenster gegenüber dem letzten Aktivitätsdatum widerspiegelt. Dies ist keine praktikable Option für mich, denn wenn der Benutzer den Browser nach dem Einloggen schließt, ist IsOnline immer noch wahr. Aber seine Sitzung wird zerstört (vorausgesetzt, er benutzt Remember Me nicht). Wenn er sich also an anderer Stelle anmeldet, wird er sagen: "Tut mir leid, dass Sie immer noch angemeldet sind".

Gibt es irgendwelche schnellen und schnellen Möglichkeiten, dies zu tun ..?

ich zwingt die Nutzer dachte so „erinnert“ werden, wenn er in einer boolean „IsReallyOnline“ protokolliert wird wahr und umgekehrt eingestellt werden, wenn er .. abmeldet Obwohl diese Option ist es Einschränkungen, (Menschen wenden aus cookies, nicht abmelden und den browser schließen dann summ1 kommt sonst und browser auf die seite und er ist eingeloggt etc ....) scheint es für jetzt am meisten praktikabel?

Irgendwelche Vorschläge?

Vielen Dank im Voraus

Antwort

1

Sie fragen wirklich nach etwas, das außerhalb des Aufgabenbereichs des Internets liegt. Das HTTP-Protokoll ist per Definition statuslos, dh zu jeder Zeit; Ein Server braucht nie zu wissen, ob ein Client noch existiert. Die neueren/älteren Implementierungen von Webserver-Programmiersprachen (z. B. php/asp.net mvc) scheuen den größten Teil davor, irgendeinen Zustand über verbundene/aktive Clients zu speichern.

Einige Dinge, sich zu fragen sind:

Wie lange darf ein Benutzer sein ‚aktiv‘ auf einer Seite ohne einen Postback verursacht? Auf Javascript basierende Seiten können es einem Benutzer erlauben, eine Seite interaktiv eine Zeitlang zu verwenden, bevor irgendeine Art von Postback passiert.

Werden die Benutzer einen Proxy- oder Caching-Server durchlaufen? Mehrere Anfragen von "verschiedenen" Benutzern können in diesem Fall von derselben Maschine kommen.

Wird Ihre Anwendung nur auf einem Computer oder einer Serverfarm ausgeführt? Sie müssen sicherstellen, dass der Lastausgleich (z. B.) verschiedene Benutzer nicht auf verschiedene Server stuft, sodass mehrere Anmeldungen möglich sind.

Wie wäre es mit einem Benutzer, der legitimerweise zwei verschiedene Browser auf demselben Computer verwendet? Soll das erlaubt sein?

Man könnte vorschlagen, dass Ihr Problem hier aus dem Versuch resultiert, die falsche Technologie zu verwenden, die Ihren Anforderungen entspricht? Vielleicht wäre das Schreiben einer Client-Anwendung, die eine direkte Verbindung zu Ihren Servern verwendet, "sicherer"? (Ja, ich verstehe, dass dies ein riesiger Ärger ist, aber wenn Ihre Anforderung für einen Benutzer/eine Anmeldung absolut ist, könnten Sie vielleicht diese Straße erkunden?

)

Oh gut, eine Web-Lösung

Für eine http zentrierte Lösung könnten Sie versuchen, ein JavaScript-Timer eine Anfrage an den Server, um anzuzeigen, alle X Sekunden zu machen, dass die Sitzung noch aktiv ist. Solange der Browser geöffnet ist und die Netzwerkverbindung gültig ist, sollten Sie diese "Pings" erhalten. Die Sitzung wird von dem Cookie geöffnet, der von der httprequest übergeben wurde.

Sie werden in der Lage, die ‚Ping‘ Seite zu codieren, die Benutzerdaten entweder in dem Anwendungsobjekt oder eine Mitgliedschaft Anbieter Ihrer Wahl speichern dann diese Provider abzufragen, wenn ein Client eingeloggt sein versucht.

Diese erfordert eine relativ kurze Zeitüberschreitung bei einer Sitzung oder einem anderen Mechanismus, um sicherzustellen, dass ein abgestürzter Browser Ihren legitimen Benutzer nicht zu lange blockiert.

Bitte beachten Sie: Dies wird schrecklich scheitern, wenn der Benutzer Javascript aktiviert hat (gehen Sie nicht davon aus, dass sie haben werden!)

1

Schnell Option: Shop IsOnline als Session. Überprüfen Sie, ob Sitzung wahr ist, dann erlauben. Wenn nicht, nicht erlauben.

Wenn der Benutzer den Browser schließt, wird er in einer Sitzung abgemeldet.