2010-06-03 5 views
7

Um Internet Explorer 8 "stabiler" und "schneller" zu machen, hat Microsoft die zugrunde liegende Architektur des Browsers geändert und eine Funktion namens "Loosely Coupled IE" (LCIE) eingeführt, die Session-Sharing über TAB ermöglicht und neue Instanzen.Wie kann ich Session-Sharing vermeiden, das von IE8 programmatisch in der Java EE-Anwendung bereitgestellt wird?

Aber Sitzungsfreigabe kann fatal sein, wenn jemand versucht, zwei verschiedene Dinge gleichzeitig mit der gleichen Anwendung, z. So wie jemand ein Ticket für die Hin- und Rückreise buchen möchte, wird er zu diesem Zeitpunkt 2 gleiche Tickets buchen, was er nicht beabsichtigt hat.

MÖGLICHE LÖSUNG AUF IHM

  1. Während ein neues Fenster erstellt, sondern die Schaffung von auf ein Symbol oder Strg + N klicken, sollten wir Datei verwenden -> Neue Sitzung; es wird nicht passieren.

  2. Sie können eine Registrierungsänderung auf dem Client-PC vornehmen, indem Sie Folgendes hinzufügen.

    [HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main]

„TabProcGrowth“ = dword: 00000000

Will "lose Paar IE8" deaktivieren; IE8 funktioniert dann wie frühere Versionen von IE.

  1. Führen Sie MSIE mit iexplore.exe -nomerge wird deaktivieren "locker paar IE8"; IE8 funktioniert dann wie frühere Versionen von IE.

Aber wie mache ich es programmatisch?


Sie sehen, mein Problem ist nicht meine Anwendung. Es funktioniert gut, wenn ich einen Benutzer anmelde, aber wenn ich mehrere Benutzer über verschiedene Benutzer von verschiedenen Instanzen des IE8-Browsers anmelde, überschreiben meine späteren Sitzungsdaten die vorherige, weil beide IE-Browser dasselbe verwenden Session-ID. Es geschieht wegen der Sitzungsfreigabe von IE8. Es gibt nur eine Sitzung für eine Anwendung, aber wie viele Benutzer ich mich anmelde. Eigentlich möchte ich Sitzung pro Benutzer beibehalten.

Wie wenn ich Gmail in einem Browser anmelde. Wenn ich gerade Google Mail in einem anderen Browser eingib. Es meldet sich automatisch an. Ich möchte das nicht in meiner Bewerbung. Ich sollte mich von einem anderen Benutzer zu einem Zeitpunkt einloggen, an dem ich einen unabhängigen Betrieb durchführen sollte.

Meine Anwendung verwendet Struts, Spring, Hibernate & JBoss-Anwendungsserver.

Jetzt sagen Sie mir, wie ich fortfahren sollte?

Antwort

0

Versuchen Sie, die Sitzungs-ID auf der Clientseite zu verwalten. Zum Beispiel auf der JSP-Ebene. Dann senden Sie es zurück an die Server-Komponente und versuchen Sie es zu verfolgen. Sagen Sie, wenn die empfangene Sitzung derzeit auf der Serverseite läuft, dann halten Sie sie für einige Zeit durch Synchronisierung oder einen ähnlichen Wartemechanismus. Ich hoffe, dass diese Art von Sitzungsproblemen knifflig gelöst werden sollte.

2

Ich denke, dass die oben beschriebenen Probleme auf allen Browsern repliziert werden können und serverseitig besser angegangen werden können. Ein Ansatz, den ich kenne, ist es, eine Konversations-ID zu erstellen und den Lebenszyklus der Konversation mit einer State-Machine zu verwalten.

Dies ermöglicht Ihnen (und Ihren Benutzern), eine Sitzung zu haben, auf der mehrere Konversationen abgehalten werden können, was in der Praxis häufig geschieht, zumindest in internen Unternehmensanwendungen. Die Welt ist ein chaotischerer Ort, als die Geschäftsprozessmodelle zeigen.

0

Ihre beste Wette ist wahrscheinlich, ein Web-Framework zu verwenden, das mehrere gleichzeitige Sitzungen (manchmal Konversationen oder Flows genannt) unterstützt, oder einfach vermeiden, die Sitzung so viel zu verwenden und REST zu gehen. Wenn Sie es auf dem Client hacken müssen, können Sie dies nicht über Ihre Webanwendung tun, aber ein benutzerdefiniertes Win-Programm oder eine .reg-Datei könnte dies tun. Dies bedeutet auch, dass Benutzer mit anderen Betriebssystemen und Browsern immer noch das gleiche Problem haben.

0

Ich mochte nicht die anderen angebotenen Lösungen. Die einzige Sache, die ich will, ist, eine URL zur Verfügung zu stellen, auf die der Benutzer klicken kann und es erhält eine neue Sitzung, um sich anzumelden. Es gibt eine klare sessionAuthentication Funktion aber nicht eine openLinkInNewSessionWindow

Eine Arbeit um für IE8 Browser, den Sie einen Link auf der Seite „multiple login“ bieten könnte und das hässliche WScript aus dem Browser verwenden. Ein Beispiel:

<html> 
    <head>  
    <script> 
     function openNewSessionIE8NoMerge() { 
     // This opens a new session window for windows with IE8, unfortually there is a Active X security warning. 
     var WshShell = new ActiveXObject("WScript.Shell"); 
     WshShell.Run("iexplore.exe -nomerge www.gmail.com?testNewSession"); 
     } 
    </script> 
    </head> 

    <a href="#" onclick="javascript:openNewSessionIE8NoMerge();">Click here for a new session IE8 (multiple sessions on the same application)</a> 
</html> 

Test: Speichern Sie das Beispiel in sampleNewSession.html, öffnen Sie die Datei mit IE8, in einem neuen Tab Login in gmail, drücken Sie auf den Link in sampleNewSession. Jetzt gibt es ein neues Fenster und nicht eingeloggt.

Dies wird dem Benutzer helfen, er kann einfach auf einen Link klicken. Das einzige Problem ist die ActiveX-Sicherheitsmeldung.

+0

ya es funktioniert ... Aber das ist nicht, was mein Bedürfnis ist. – Idiot

+0

ya, es funktioniert ... Aber das ist nicht, was mein Bedürfnis ist. Ich brauche eine Webanwendung in struts1.2. Wir haben verschiedene Benutzergruppen. Verschiedene Benutzergruppen erhalten unterschiedliche Einrichtungen. Wenn ich mich jedoch mit zwei verschiedenen Gruppenbenutzern in zwei verschiedenen Browsern anmelde, wird die Identität der ehemaligen Gruppe durch den späteren Gruppenbenutzer überschrieben. – Idiot