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
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 ().
<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.
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"];
//...
}