2008-12-12 10 views
16

Ich habe eine Sitzungszeitwarnung mit JavaScript eingeführt, die den Benutzer einfach fragt, ob sie ihre Sitzung verlängern oder sich abmelden möchten. Das Problem besteht darin, dass dies für ein Intranetportal gilt, in dem Hauptbenutzer häufig mehrere Browserfenster oder Registerkarten gleichzeitig für die Anwendung geöffnet haben. Momentan werden sie aufgefordert, sich von jedem Browserfenster abzumelden. Wie kann ich den Code intelligenter machen, um zu erkennen, dass er eine andere Browsersitzung aktiv verwendet?Wie können Sie eine Sitzungszeitwarnung anzeigen, die intelligent genug ist, mehrere geöffnete Browser oder Tabs zu behandeln?

+0

Dies ist eine interessante Frage und sehr praktisch. Ich werde auf die Antwort darauf achten, da ich keine unmittelbare Antwort habe :) –

+0

Keine Ahnung, warum dies abgelehnt wurde. – MusiGenesis

+0

Ja, ich war auch überrascht. Ich habe es gewählt. Auch weil Joel SO neu ist, hat er nichts falsch gemacht, um ihn zu entmutigen, indem er abstimmt :) –

Antwort

2

Sie müssten den Sitzungsstatus auf dem Server mit Ajax überprüfen und alle geöffneten Sitzungen/Fenster des Benutzers verfolgen. Mit der Abmeldewarnung können Sie dann nur auf eine der verfügbaren Sitzungen abzielen.

Als Antwort auf Ihren Kommentar:

Verwenden Sie nicht den eingebauten Session-Mechanismus, entwickeln Sie Ihre eigenen eine serverseitige presistent Array oder ein Datenbankprotokoll verwendet wird.

Nein, nichts in der HTTP-Anfrage sagt Ihnen, wie viele Browser geöffnet sind, aber Sie können Ihr eigenes sessionID-Cookie zuweisen, wenn der Benutzer jedes Browserfenster öffnet. Führen Sie einen Ajax-Anruf beim Server aus, überprüfen Sie, ob der Benutzer das Zeitlimit überschritten hat, und wenn Sie der niedrigste (oder letzte) Eintrag im Sitzungsprotokoll sind, wird die Warnung vom Browser angezeigt.

+2

2 Gedanken: 1) Wie Sie den Sitzungsstatus einer .NET-App ohne tatsächlich zu überprüfen Verlängerung der Sitzung? 2) Gibt es tatsächlich eine Möglichkeit zu sagen, wie viele Browserfenster ein Benutzer hat? Nichts in der HTTP-Anfrage teilt Ihnen dies – Joel

+0

Haben Sie die Funktion zu aktualisieren Sitzung aufgerufen, wenn der Benutzer eine Aktion ausführt, rufen Sie nicht die Funktion, wenn Sie den Sitzungsstatus überprüfen. Sie können anhand der Agentenzeichenfolge feststellen, wie viele Browser geöffnet sind. Denken Sie nicht, dass Sie jeweils Fenster/Register erkennen können. – Adam

+0

Ich verstehe nicht, wie das funktionieren würde.Auch wenn sie separate Browser (wie IE und FF) oder sogar separate Instanzen desselben Browsers verwenden, haben sie unterschiedliche Sitzungen, so dass dies kein Problem darstellt. – Joel

0

Würde das funktionieren?

Speichern Sie einen Javascript-Cookie und überprüfen Sie, ob die Sitzung in einem anderen Tab erweitert wurde.

sieht aus wie funktionierts ...

+1

Nach 4 Jahren sieht das immer noch nach der richtigen Antwort aus, zumindest für ASP.NET. Das Problem ist, dass Sie eine Kombination von clientseitigen und serverseitigen Ansätzen benötigen, und ich denke, Sie können es nicht serverseitig bekommen (weil Sie Login/Out oder Session Start/Ende, aber nicht Client- verfolgen können) Nebenaktivität, von der der Server nichts weiß). Ich denke deshalb brauchen Sie genau das, was Sie hier vorschlagen. Ich poste es, wenn es funktioniert hat. – philw

2

Sie nicht auf allen Registerkarten/Fenstern zählen können Teil der gleichen Session zu sein, weil sie in separaten Prozessen hervorgebracht werden könnten, und enthalten, und Sie haben nicht viel Kontrolle darüber.

Wenn Ihr Code jedoch auf einen JavaScript-Cookie verweist, können Sie den Pseudo-Session-Status über ein Postback (synchron oder asynchron AJAX) überprüfen. Aber dann sind Sie darauf angewiesen, dass Cookies im Browser des Nutzers aktiviert werden.