Einzigartige session in mehreren browser-tabs in ASP.NET MVC
Will ich schaffen einzigartige session wenn der Benutzer öffnen ein neues browser-tab oder Fenster in ASP.NET MVC-Anwendung. Ist es möglich in ASP.NET /MVC ?
Ich versuchte, befolgen Sie folgende Lösung
asp.net - Sitzung - mehrere browser-Registerkarten - verschiedene Sitzungen?
Aber es funktioniert nicht ASP.NET MVC. Oben genannte Lösung mit ViewState, in MVC-ich habe versucht, mit TempData, aber es funktioniert nicht.
- Haben Sie versucht, mit einer Session?
- Es gibt keine Möglichkeit für den server zu wissen, wenn ein Benutzer eröffnet eine Seite in einem neuen tab. (Einige browser(N) kann eine solche Ausdehnung, aber 99,999% der Benutzer nicht).
- Es funktioniert nicht mit Session als session-Werte überschrieben werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach Jahren habe ich endlich die Lösung gefunden für dieses Problem:
1.) Der browser MUSS die ID von selbst, da http stateless cookies gespeichert sind, nicht für den browser-tab getrennt, und daher die asp.net Sitzung unterscheidet nicht die einzelnen Registerkarten, wie gut.
2.) Wenn eine neue Registerkarte zu öffnen, die JS-Fenster.name ist ". Nach dem Wechsel der Fenster.Namen, um einen gewissen Wert, wird es nicht mehr ändern, solange der Reiter lebt und es wird nicht geändert, von einigen code.
Also die Lösung ist: Implementieren Sie einige kurze JS-code in die *.master oder jeder *.aspx-Datei:
Fügen Sie auch in der form-Abschnitt der *.master oder jeder *.aspx-Datei:
Nun können Sie abrufen das Fenster.name == EINDEUTIGE ID durch Lesen der hidden-Feld nach jedem postback, selbst wenn der Benutzer springt von Seite zu Seite und zurück, nach Stunden auf die form.
Wie Sie wissen, ist HTTP ist stateless und eine sehr häufige Mechanismus, über den Zustand zwischen Anfragen ist die Verwendung von session-Variablen. Das problem tritt auf, wenn Sie öffnen einen neuen Browser-tab, da der session ist die gleiche, so dass jede änderung, die Sie in der neuen Registerkarte gonna Auswirkungen auf andere tabs.
Sie hat nicht genau angeben, was Sie wollen, aber lassen Sie uns sagen, dass Sie ein Produkt Liste Seite, wo der Benutzer kann eingeben, suchen, filtern, und Sie möchten, speichern Sie Sie in der Sitzung. Wenn der Benutzer legt einen Suchfilter mit dem Wert in tab 1, tab 2 ist gonna den gleichen Wert haben (Sie teilen session-Variablen). Was können Sie tun?
1) Verwenden Sie diese Methode zum hinzufügen einer guid in der URL: http://www.codeproject.com/Articles/331609/Get-an-unique-session-in-each-browser-tab
2) etwas ähnliches wie das, was bereits im vorherigen Punkt aber nicht in der gleichen Art und Weise und das ist, was ich Tat, um dasselbe problem zu lösen.
a) Meine links zur Suche-Seite /Produkt/List?guid=xxx anstatt nur /Product/List. Wenn der Benutzer manuell types /Product/List, ich bin Neuausrichtung der ihn auf eine neue URL, wo die GUID eingestellt ist.
Jedes mal, wenn Sie klicken Sie auf die "list" - link und Ziel-eine neue Registerkarte, eine neue GUID generiert wird.
b) ich habe einen session-Schlüssel mit der GUID, sodass jede Seite hat Ihre eigenen Werte. Sie können 2 tabs zur gleichen Zeit geöffnet, und Sie sind gonna werden mit verschiedenen session-Werten, da die guid ist wird anders sein.
Diese Lösung ist nicht perfekt, aber zumindest funktioniert es.
Ich hoffe, es hilft.
Einer variation der ersten Antwort, mit HTML 5, ist die Verwendung von Fenster.sessionStorage anstatt Fenster.name. So könnte man etwas tun, wie diese auf der Einstiegsseite der Anwendung:
Dann in jeder controller-action, die erfordert, dass eine session übergeben Sie den parameter mit: