none
Session sumindo RRS feed

  • Pergunta

  • Estou com problemas em relação aos usuários do sistema.

    Quando logo na minha aplicação faço o seguinte:

    /*Carregar o perfil do usuario*/ PerfilBo perfilbo = new PerfilBo(); perfil perfilmodel = new perfil(); perfilmodel = perfilbo.Find(n => n.id == user.id_perfil && n.status.Equals("A")).First<perfil>();

    Session["permissao"] = perfilmodel;

    salvo a a classe perfil em uma session, ai quando entro na página de vendas faço o seguinte teste:

    if (!IsPostBack)
                {
                    if (Session["permissao"] != null)
                    {
                        if (Session["permissao"] is perfil && ((perfil)Session["permissao"]).cad_venda.Equals("N"))
                        {
                            Response.Redirect("NaoPermitido.aspx");
                        }
                        else
                        {
                            lblDataVenda.Visible = ((perfil)Session["permissao"]).alterar_dt_venda.Equals("S");
                            txtDataVenda.Visible = ((perfil)Session["permissao"]).alterar_dt_venda.Equals("S");
                            hlkImprimir.Visible  = false;       
                        }
                    }                                
                } 

    onde verifico se o usuário tem permissão para usar a session, o meu problema é, quando faço algumas movimentações no meu sistema tipo: vendo, consulto, cadastro entre outros...estes meus testes não são mais válidos, como se a session tivesse sumido, olho nas configurações do navegador e não encontro mais nada, como faço para resolver esse problema?

    Desde já agradeço. 

    sexta-feira, 6 de julho de 2012 03:27

Respostas

  • a solução que encontrei foi que toda vez que entrar na pagina vou fazer essa verificação dentro do banco de dados, sei que ira ficar mais lenta mas foi a única que encontrei.
    • Marcado como Resposta Harley Araujo quinta-feira, 2 de agosto de 2012 14:08
    sábado, 7 de julho de 2012 10:18

Todas as Respostas

  • Olá Thiago, tudo bem?

    Nesse meio tempo que você estava testando, você chegou a atualizar o sistema? Pois caso esteja, a sessão poderá estar sendo reiniciada.

    Ao debugar, já verificou como está a sessão, se está nula ou não?


    Atenciosamente,
    Raphael A. F. Cardoso
    Blog: www.csharpbrasil.com.br
    Twitter: @csharpbrasil / @ferronicardoso

    “Se um dia você tiver que escolher entre o mundo e o amor, lembre-se: Se escolher o mundo ficará sem amor, mas se você escolher o amor, com ele conquistará o mundo” (Albert Einstein)

    sexta-feira, 6 de julho de 2012 03:39
  • Quando vou debugando fica tudo normal faz todas essas validações, isso acontece sem ser debugando e depois de certo tempo de movimentação com o servidor, eu consegui simular isso quando efetuo um monte de build ai atualizo minha página e os teste se tornam inválidos pois a session sumiu. 
    sexta-feira, 6 de julho de 2012 11:06
  • Cara da uma olhada nesse artigo, acho que pode ajuda:

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

    Att...

    sexta-feira, 6 de julho de 2012 11:17
  • Já deu uma olhada nesse artigo anteriormente, tmb aceito uma sugestão de como fazer isso de outra forma. Estou achando esse controle de perfil muito complexo usando session e dando muito trabalho.
    sexta-feira, 6 de julho de 2012 11:48
  • Tenta coloca esse carinha no WebConfig

    Web.Config

    <?xml version="1.0"?>
    <configuration>
    <system.web>
    
      <sessionState timeout="60" />
    
    </system.web>
    

    Além da configuração que deve ser feita, já verificou no IIS qual o valor estipulado?
    sexta-feira, 6 de julho de 2012 11:54
  • mas isso acontece até no servidor onde o site esta hospedado, vou colocar esse código que vc passou para testar, vlw.
    sexta-feira, 6 de julho de 2012 12:33
  • Thiago,

    Se você gera novas builds(compila o projeto) o sistema vai zerar a SESSION mesmo, isso é normal. Se você acessa uma página e grava uma SESSION e continua navegando tudo bonitinho ela vai ficar lá, mas se você por alguma motivo envia a DLL novamente para o servidor ou compila o projeto, ele nota que houve um alteração e vai matar todas as SESSIONS no próximo acesso por segurança.

    Uma dica...procure não utilizar Session["NOME"] = VALOR tente utilizar Session.Add("NOME", VALOR); por incrível que pareça essa segunda é melhor, não sei por que!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    sexta-feira, 6 de julho de 2012 13:24
  • Entendi, mas isso acontece no cliente que esta hospedado em outro servidor em que eu atualizei há bastante tempo. 
    sexta-feira, 6 de julho de 2012 13:59
  • Thiago,

    Como o Lennon disse a uns posts atrás, você pode tentar controlar esse tempo pelo web.config, mas como eu disse...se você faz uma atualização do servidor ele vai zerar a SESSION. Não adianta você armazenar uma informação na SESSION e deixar ela parada lá sem fazer nada pois o SERVER vai remover isso por que custa memória. Você pode armazenar a SESSION no MSSQL dessa forma você não teria esse problema, mais sobre esse assunto em:

    http://support.microsoft.com/kb/317604 
    http://www.dirigodev.com/blog/storing-aspnet-session-state-in-sql-server/ 
    http://www.codeproject.com/Articles/41726/Peer-to-Peer-ASP-NET-State-Server 

    Espero ter ajudado...boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    sexta-feira, 6 de julho de 2012 15:41
  • Teria alguma outra forma de armazenar essa classe com os valores do perfil?

    Lembrando que uso o banco de dados mysql.

    • Editado Thiago_Porto sexta-feira, 6 de julho de 2012 17:19
    sexta-feira, 6 de julho de 2012 17:18
  • Thiago,

    Se é pouca informação guarde em cookie!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    sexta-feira, 6 de julho de 2012 18:16
  • é apenas uma linha com 40 campos.
    sexta-feira, 6 de julho de 2012 18:18
  • a solução que encontrei foi que toda vez que entrar na pagina vou fazer essa verificação dentro do banco de dados, sei que ira ficar mais lenta mas foi a única que encontrei.
    • Marcado como Resposta Harley Araujo quinta-feira, 2 de agosto de 2012 14:08
    sábado, 7 de julho de 2012 10:18