asp.net – session – várias abas do navegador – sessões diferentes?

Gostaria de manter um estado de session por guia do navegador.

É fácil (ou até mesmo possível) fazer no ASP.NET?

Exemplo: um usuário acessa Ctrl-T no firefox 5 vezes e acessa o site em cada guia. Eu gostaria que cada guia tivesse seu próprio estado de session no servidor

Para facilitar estados de session de várias guias para um usuário sem sobrecarregar o URL, faça o seguinte.

Na sua function load load, inclua:

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

Quando você salva algo no seu estado de session, inclua o PageID:

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

Notas :

  • Tal como acontece com ID de session em geral, você não pode confiar que os visualizadores mal-intencionados não irá alterar o SessionID / PageID. Esta é apenas uma solução válida para um ambiente em que todos os usuários possam ser confiáveis. Felizmente, o ViewState oferece mais proteção do que usar um campo de input oculto.
  • Você não terá access ao PageID até que o ViewState seja restaurado no PostBack. Portanto, você não terá access ao PageID no manipulador page_init ().
      

http://msdn.microsoft.com/pt-br/library/ms178581.aspx

Neste caso, cada aba receberá um ID único e parecerá que é outro visitante.

Usando a resposta de Brian Webster , encontrei um problema com XMLHttpRequests. Descobriu-se, XMLHttpRequests não definiu o sinalizador IsPostback como true e, portanto, a solicitação parecia uma nova solicitação e uma acabaria tendo um novo estado de session para essa solicitação. Para resolver esse problema, também verifiquei o valor do ViewState("_PageID")

para que meu código fique assim em 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"]; //... }