locked
Minha sessao expira muito rapido. Como eu aumento esse tempo ? RRS feed

  • Pergunta

  • Eu uso o comando abaixo para salvar dados de uma sesao

    CLIENTES.USUARIO = Session["SessionUsuario"].ToString(); 

    Porem depois de um certo tempo essa sessao expira dando erro para o usuario.

    Como eu aumento essa sessao para funcionar 8 horas ?

    Fico no aguardo

    Obrigado

    quarta-feira, 2 de dezembro de 2015 17:11

Respostas

  • Olá Ricardo,

    Sei como é tentar de tudo o que falam e nada resolver, porém não é tão simples fazer uma boa análise sem a aplicação completa, mesmo assim gostaria de expor mais algumas ideias:

    Há outros motivos que podem ocasionar a perda da sessão.

    A sessão fica armazenada no servidor, e quem controla é o pool do aplicativo, portando caso o pool seja reciclado, todas as sessões são perdidas. O Pool pode ser reciclado por N motivos, como por exemplo alto uso de memoria, falhas consecutivas e na maioria das vezes ele está configurado para alguns momentos do dia ser reciclado.

    Como você precisa garantir 8 horas de um dado temporário, sugiro outros meios, como por exemplo o Identity ou cookies.

    Espero ter ajudo, caso precise mais informações e ajuda, estamos a disposição.

    @edit: ortografias
    • Editado Wiliam Buzatto sexta-feira, 4 de dezembro de 2015 21:37
    • Marcado como Resposta Marcos SJ segunda-feira, 7 de dezembro de 2015 14:02
    sexta-feira, 4 de dezembro de 2015 21:33

Todas as Respostas

  • Veja nessa discussão algumas possíveis soluções: how to increase session timeout in asp.net?.


    Joel Rodrigues MSP, MCP, MTA. Editor geral .NET Magazine e Easy .NET Magazine

    • Marcado como Resposta Marcos SJ quarta-feira, 2 de dezembro de 2015 19:51
    • Não Marcado como Resposta Ricardo-ti2016 quinta-feira, 3 de dezembro de 2015 13:47
    quarta-feira, 2 de dezembro de 2015 18:53
  • Eu coloquei dessa forma no meu web.config

    <sessionState mode="InProc" timeout="500" />

    Será que resolve ?

    Quanto tempo representa o 500 ?

    Fico no aguardo.

    Obrigado

    quarta-feira, 2 de dezembro de 2015 19:55
  • Bom dia

    Eu coloquei da forma acima no meu web.config

    E mesmo assim esta expirando a sessão do usuário depois de certo tempo.

    <sessionState mode="InProc" timeout="500" />

    Como eu resolvo isso ?

    Fico no aguardo

    Obrigado

    quinta-feira, 3 de dezembro de 2015 13:41

    • Editado Ricardo-ti2016 quinta-feira, 3 de dezembro de 2015 15:29 estava sem o erro
    quinta-feira, 3 de dezembro de 2015 15:26
  • Ja tentei dessa forma e da erro

    Erro de Servidor no Aplicativo '/'.

    Estado da sessão não está disponível neste contexto.

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.Web.HttpException: Estado da sessão não está disponível neste contexto.

    Erro de Origem: 
    Linha 18:             AuthConfig.RegisterOpenAuth();
    Linha 19:             RouteConfig.RegisterRoutes(RouteTable.Routes);
    Linha 20:             Session.Timeout = 2880;
    Linha 21:         }
    Linha 22: 

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\Global.asax.cs    Linha: 20 

    Rastreamento de Pilha: 
    [HttpException (0x80004005): Estado da sessão não está disponível neste contexto.]
       System.Web.HttpApplication.get_Session() +3521927
       ControledeUsuarios.Global.Application_Start(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\Global.asax.cs:20
    
    [HttpException (0x80004005): Estado da sessão não está disponível neste contexto.]
       System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9941577
       System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
       System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172
       System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +339
       System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296
    
    [HttpException (0x80004005): Estado da sessão não está disponível neste contexto.]
       System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9923088
       System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +90
       System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +261
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.114.0

    quinta-feira, 3 de dezembro de 2015 15:52
  • Boa tarde.

    Ricardo, tente o seguinte no teu global.asax:

    HttpContext.Current.Session.Timeout = 2880;

    Att., Rafael Simor

    quinta-feira, 3 de dezembro de 2015 16:01
  • Erro de Servidor no Aplicativo '/'.

    Referência de objeto não definida para uma instância de um objeto.

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.

    Erro de Origem: 
    Linha 18:             AuthConfig.RegisterOpenAuth();
    Linha 19:             RouteConfig.RegisterRoutes(RouteTable.Routes);
    Linha 20:             HttpContext.Current.Session.Timeout = 2880;
    Linha 21:             
    Linha 22:         }

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\Global.asax.cs    Linha: 20 

    Rastreamento de Pilha: 
    [NullReferenceException: Referência de objeto não definida para uma instância de um objeto.]
       ControledeUsuarios.Global.Application_Start(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\Global.asax.cs:20
    
    [HttpException (0x80004005): Referência de objeto não definida para uma instância de um objeto.]
       System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9941577
       System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
       System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172
       System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +339
       System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296
    
    [HttpException (0x80004005): Referência de objeto não definida para uma instância de um objeto.]
       System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9923088
       System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +90
       System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +261
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.114.0
    quinta-feira, 3 de dezembro de 2015 16:14
  • Em qual evento do global.asax tu estás colocando o timeout?

    Tu precisas colocar no evento Session_Start, pois é lá que a Sessão poderá ser alterada.

    E qual a forma de login? FormsAuthentication?


    Att., Rafael Simor


    • Editado SimorC quinta-feira, 3 de dezembro de 2015 16:27
    quinta-feira, 3 de dezembro de 2015 16:19
  • void Application_Start(object sender, EventArgs e)
            {
                // Code that runs on application startup
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                AuthConfig.RegisterOpenAuth();
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                HttpContext.Current.Session.Timeout = 2880;


            }

    <authentication mode="Forms">
          <forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="~/" />
        </authentication>

                
    sexta-feira, 4 de dezembro de 2015 12:48
  • Ricardo, veja:

    void Application_Start(object sender, EventArgs e)
    Como eu havia falado, tu precisas colocar no "Session_Start", senão não vai funcionar.

    Att., Rafael Simor

    sexta-feira, 4 de dezembro de 2015 12:49
  • Coloquei dessa forma como você mostrou acima

                            

     void Application_Start(object sender, EventArgs e)
            {
                // Code that runs on application startup
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                AuthConfig.RegisterOpenAuth();
                RouteConfig.RegisterRoutes(RouteTable.Routes);



            }

            void Session_Start(object sender, EventArgs e)
            {
                HttpContext.Current.Session.Timeout = 2880;
            }

    Porem não funcionou. Durou apenas 18 minutos. Como eu resolvo isso. Por favor. Obrigado

    sexta-feira, 4 de dezembro de 2015 13:42
  • Coloque só:

    void Session_Start(object sender, EventArgs e)
            {
    		Session.Timeout = 60;
            }

    Se não me engano o valor é em minutos.

    Edit: E tire as configurações do web.config sobre isso, senão é capaz de dar conflito e/ou o IIS sobrescrever essas configurações.


    Att., Rafael Simor


    • Editado SimorC sexta-feira, 4 de dezembro de 2015 13:46
    • Sugerido como Resposta Marcos SJ sexta-feira, 4 de dezembro de 2015 14:12
    sexta-feira, 4 de dezembro de 2015 13:46
  • Bom dia,

    Pelo web.config, basta colocar o tempo em minutos. Coloca dentro do system.web:

    <configuration>

      <system.web>
        <sessionState timeout="60"></sessionState>
      </system.web>
    </configuration>

    Atensiosamente,

    • Sugerido como Resposta Marcos SJ sexta-feira, 4 de dezembro de 2015 17:18
    sexta-feira, 4 de dezembro de 2015 15:59
  • JA COLOQUEI NO WEB.CONFIG

    <sessionState mode="InProc" timeout="2880" />

    TAMBEM NO GLOBAL.ASAX

    void Session_Start(object sender, EventArgs e)
            {
                Session.Timeout = 240;
            }

    POREM DEPOIS DE 10 MINUTOS A SESSAO EXPIRA

    NÃO SEI MAIS O QUE FAZER

    ME AJUDA

    OBRIGADO

    sexta-feira, 4 de dezembro de 2015 18:37
  • Olá Ricardo,

    Sei como é tentar de tudo o que falam e nada resolver, porém não é tão simples fazer uma boa análise sem a aplicação completa, mesmo assim gostaria de expor mais algumas ideias:

    Há outros motivos que podem ocasionar a perda da sessão.

    A sessão fica armazenada no servidor, e quem controla é o pool do aplicativo, portando caso o pool seja reciclado, todas as sessões são perdidas. O Pool pode ser reciclado por N motivos, como por exemplo alto uso de memoria, falhas consecutivas e na maioria das vezes ele está configurado para alguns momentos do dia ser reciclado.

    Como você precisa garantir 8 horas de um dado temporário, sugiro outros meios, como por exemplo o Identity ou cookies.

    Espero ter ajudo, caso precise mais informações e ajuda, estamos a disposição.

    @edit: ortografias
    • Editado Wiliam Buzatto sexta-feira, 4 de dezembro de 2015 21:37
    • Marcado como Resposta Marcos SJ segunda-feira, 7 de dezembro de 2015 14:02
    sexta-feira, 4 de dezembro de 2015 21:33
  • Bom dia,

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma thread nova.

    Atenciosamente

    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 7 de dezembro de 2015 14:02