asp.net – Sitzung – mehrere Browser-Registerkarten – verschiedene Sitzungen?

Ich möchte einen Sitzungsstatus pro Browser-Registerkarte verwalten.

Ist das in ASP.NET einfach (oder sogar möglich)?

Beispiel: Ein Benutzer drückt Strg + T in Firefox 5 Mal und besucht die Website in jedem Tab. Ich möchte, dass jede Registerkarte ihren eigenen Sitzungsstatus auf dem Server hat

Führen Sie die folgenden Schritte aus, um Sitzungsstatus für mehrere Registerkarten für einen Benutzer zu ermöglichen, ohne die URL zu überlasten.

Fügen Sie in Ihrer Formularladefunktion Folgendes hinzu:

If Not IsPostback Then 'Generate a new PageiD' ViewState("_PageID") = (New Random()).Next().ToString() End If 

Wenn Sie etwas in Ihrem Sitzungsstatus speichern, schließen Sie die PageID ein:

 Session(ViewState("_PageID").ToString() & "CheckBoxes") = D 

Anmerkungen :

  • Wie bei den Sitzungs-IDs im Allgemeinen können Sie nicht darauf vertrauen, dass bösartige Benutzer die Sitzungs-ID / Seiten-ID nicht ändern. Dies ist nur eine gültige Lösung für eine Umgebung, in der allen Benutzern vertraut werden kann. Glücklicherweise bietet ViewState mehr Schutz als ein verstecktes Eingabefeld.
  • Sie haben keinen Zugriff auf die PageID, bis ViewState nach PostBack wiederhergestellt wird. Daher haben Sie im Handler page_init () keinen Zugriff auf die PageID.
      

http://msdn.microsoft.com/en-us/library/ms178581.aspx

In diesem Fall erhält jeder Tab eine eindeutige ID und es sieht aus, als wäre es ein anderer Besucher.

Mit der Antwort von Brian Webster fand ich ein Problem mit XMLHttpRequests. Es stellte sich heraus, dass XMLHttpRequests das IsPostback Flag nicht auf “true” gesetzt hat und daher die Anfrage wie eine neue Anfrage aussah und man am Ende einen neuen Sitzungsstatus für diese Anfrage haben würde. Um dieses Problem zu lösen, habe ich auch den Wert von ViewState("_PageID") überprüft

so dass mein Code in C # so aussieht:

 protected dynamic sessionVar; //a copy of the session variable protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack && ViewState["_PageID"] == null) { ViewState["_PageID"] = (new Random()).Next().ToString(); Session[ViewState["_PageID"] + "sessionVar"] = initSessionVar(); //this function should initialize the session variable } sessionVar = Session[ViewState["_PageID"] + "sessionVar"]; //... }