Asp.net variável de sessão

Eu tenho um asp.net projecto com código C# atrás. Eu tenho uma classe estática chamada Globalvariável onde eu guardo algumas informações, como o produto selecionado atualmente, por exemplo.

no entanto, eu vi que quando há dois usuários usando o site, se um muda o produto selecionado, se muda para todos. As variáveis estáticas parecem ser comuns a todos.

Eu gostaria de criar (a partir do código C#) algum tipo de variável de sessão usada apenas a partir do código C#, mas não só da página, mas de qualquer aula.

Author: Amaranth, 2012-03-08

3 answers

As variáveis estáticas Sim são partilhadas por toda a aplicação, não são de modo algum privadas para o utilizador/sessão.

Para aceder ao objecto de sessão a partir de uma classe não-página, deve usar HttpContext.Current.Session.

 24
Author: driis, 2012-03-08 18:54:02

GlobalVariable é um nome enganador. Seja qual for o nome, não deve ser se for por sessão. Você pode fazer algo assim em vez disso:

// store the selected product
this.Session["CurrentProductId"] = productId;

Você também não deve tentar tornar a Colecção Session acessível globalmente. Em vez disso, passe apenas os dados de que necessita e obtenha / defina usando Session, quando apropriado.

Aqui está uma visão geral sobre o trabalho com armazenamento de sessões em ASP.net no MSDN.

 8
Author: Yuck, 2012-03-08 18:54:29
Respondeste à tua própria pergunta. Uma resposta está em variáveis de sessão. Na sua classe Globalvariável, você pode colocar propriedades que são suportadas por variáveis de sessão.

Exemplo:

public string SelectedProductName 
{
    get { return (string)Session["SelectedProductName"]; }
    set { Session["SelectedProductName"] = value; }
}
 7
Author: Khan, 2014-07-08 19:30:18