none
Lista no asp.net não separa sessões. RRS feed

  • Pergunta

  • Prezados,

    Possuo uma lista no qual adiciono alguns objetos mas irei precisar identificar de qual usuário é.

    No atual cenário, a minha lista esta sendo preenchida pelos objetos de vários usuários, o navegador deveria separar estes dados por sessão, não?

    Por exemplo, quando usuários diferentes ( usuário e navegadores diferentes ) inserem objetos nessa lista, na hora de percorrer a lista, ela está preenchida com os dados de vários usuários.

    O navegador ou ASP.NET deveria diferenciar estes dados não? porque são objetos diferentes, instâncias diferentes, o que deveria acontecer também com a Lista.

    Att,

    Caio Souza.

    quinta-feira, 18 de julho de 2013 12:42

Respostas

  • Essa lista está declarada como no código? Está como static? Ou está declarada no topo do codebehind de uma página dessa forma "public List<>...."?

    Caso seu objeto seja estático (static) ele será guardado na memória do servidor. Dessa forma todos os usuários terão acesso ao mesmo objeto, independente da sessão. Quando você declara um List fora de algum evento no codebehind da página desssa forma "public List<>...." este List será considerado, implicitamente, como objeto estático e todos os usuários compartilharão do mesmo objeto.

    • Sugerido como Resposta DiegoNovaes segunda-feira, 5 de agosto de 2013 17:30
    • Marcado como Resposta Caio SouzaBH segunda-feira, 5 de agosto de 2013 17:48
    quarta-feira, 24 de julho de 2013 20:04

Todas as Respostas

  • Essa lista está declarada como no código? Está como static? Ou está declarada no topo do codebehind de uma página dessa forma "public List<>...."?

    Caso seu objeto seja estático (static) ele será guardado na memória do servidor. Dessa forma todos os usuários terão acesso ao mesmo objeto, independente da sessão. Quando você declara um List fora de algum evento no codebehind da página desssa forma "public List<>...." este List será considerado, implicitamente, como objeto estático e todos os usuários compartilharão do mesmo objeto.

    • Sugerido como Resposta DiegoNovaes segunda-feira, 5 de agosto de 2013 17:30
    • Marcado como Resposta Caio SouzaBH segunda-feira, 5 de agosto de 2013 17:48
    quarta-feira, 24 de julho de 2013 20:04
  • Olá Caio,

    o Marcos tem razão quanto à  sua colocação. Se o List <> está como static a informação será compartilhada por qualquer usuário que acessar essa List <>, pois na verdade representa uma única aplicação no servidor. Usuários diferentes acessando a mesma aplicação. 

    • Propriedades static - Compartilhada por toda a aplicação
    • Session - apenas no contexto de um único usuário (ou requisitante)

    Isso tem a ver com gerenciamento de estado de aplicações .NET que você pode ver mais sobre aqui.

    Sugiro que você crie uma propriedade nesse seu objeto que receba o valor do ID do usuário (outro valor que achar conveniente)  que estiver na sessão e sete  essa propriedade quando for passar o objeto para a List <>.

    Abraço.


    Alexandre Felipe Malavasi Cardoso

    quarta-feira, 24 de julho de 2013 22:13
  • Pessoal,

    Testei a minha List<> sem ser static mas permanece o erro.

    Estou com o seguinte código.

    List<Issue> lstObjIssue = new List<Issue>();
    
    
    if (Session["Lote"] != null)
    {
        Session["Lote"] = lstObjIssue;
    }
    lstObjIssue.Add(objIssue);
    Session["Lote"] = lstObjIssue;
    
    
    gdvLote.DataSource = (List<Issue>)Session["Lote"];
    gdvLote.DataBind()

    Mas a questão da lista permanece.

    Quando entro no primeiro browser como usuário diferente, ele instancia a lista e fica ok mas quando no meio do processo é instanciada uma nova sessão ( aberto em novo browser e tenta realizar o mesmo processo ), a lista do primeiro usuário é zerada.


    segunda-feira, 5 de agosto de 2013 17:28
  • Amigos, a propriedade static que era o problema.

    Deixei pública e alterei o código ficou ok.

    MUITO OBRIGADO.

    segunda-feira, 5 de agosto de 2013 17:49