asp.net -session-plusieurs onglets de navigateur - différentes sessions?

j'aimerais maintenir un État de session par onglet de navigateur.

est-ce facile (ou même possible) à faire en ASP.NET je ne sais pas.

exemple: un utilisateur tape Ctrl-T dans firefox 5 fois et visite le site dans chaque onglet. J'aimerais que chaque onglet ait son propre état de session sur le serveur

27
demandé sur Brian Webster 2010-05-15 19:19:44

3 réponses

pour faciliter les états de session multi-onglets pour un utilisateur sans encombrer l'URL, faire ce qui suit.

dans votre fonction de charge de formulaire, inclure:

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

lorsque vous sauvegardez quelque chose dans votre état de Session, incluez la PageID:

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

Notes :

  • comme pour les ID de session en général, vous ne pouvez pas croire que les téléspectateurs malveillants ne changeront pas the SessionID / PageID. Ce n'est qu'une solution valable pour un environnement où tous les utilisateurs peuvent être de confiance. Heureusement, ViewState offre plus de protection que l'utilisation d'un champ d'entrée caché.
  • vous n'aurez pas accès à la PageID jusqu'à ce que le ViewState soit restauré sur PostBack. Par conséquent, vous n'aurez pas accès au PageID dans le gestionnaire page_init ().
21
répondu Brian Webster 2013-02-14 00:04:22
<configuration>
  <system.web>
    <sessionState cookieless="true"
      regenerateExpiredSessionId="true" />
  </system.web>
</configuration>

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

dans ce cas, chaque onglet obtiendra un identifiant unique et il aura l'air d'être un autre visiteur.

15
répondu zerkms 2010-05-15 15:20:58

utilisant Brian Webster ' S réponse j'ai trouvé un problème avec XMLHttpRequests. Il s'est avéré que XMLHttpRequests n'avait pas réglé le drapeau IsPostback à true et que par conséquent la requête ressemblait à une nouvelle requête et on aurait fini par avoir un nouvel état de session pour cette requête. Pour résoudre ce problème j'ai aussi vérifié la valeur du ViewState("_PageID")

pour que mon code ressemble à ceci en C#:

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"];
    //...
}
1
répondu casenonsensitive 2018-02-19 11:29:57