Tempo limite da sessão no ASP.NET

163

Estou executando um aplicativo ASP.NET 2.0 no IIS 6.0. Quero que o tempo limite da sessão seja 60 minutos, em vez dos 20 minutos padrão. Eu fiz o seguinte

  1. Situado <sessionState timeout="60"></sessionState> no web.config.
  2. Defina o tempo limite da sessão para 60 minutos nas configurações do gerenciador do IIS / propriedades do site / ASP.NET.
  3. Defina o tempo limite inativo como 60 minutos nas propriedades / desempenho do pool de aplicativos.

Ainda estou recebendo um tempo limite da sessão em 20 minutos. Preciso fazer mais alguma coisa?

Klone
fonte
1
Forneça informações sobre como você mediu os 20 minutos. Vamos ter certeza de que os 20 minutos são um tempo limite da sessão e não de outro tipo.
John Saunders
11
Marque as respostas de qualidade como aceitas usando a marca de seleção perto das setas para cima / para baixo
Brian Webster
3
Oito anos depois, a resposta correta ainda não foi aceita.
Nathan
Esclareça o que você entende por gerente do IIS / propriedades do site / definições de configuração do ASP.NET. Passo a passo, o que você mudou no IIS?
Niico 30/01/19

Respostas:

275

Você está usando autenticação de formulários?

A autenticação de formulários usa seu próprio valor para o tempo limite (30 min. Por padrão). Um tempo limite de autenticação de formulários enviará o usuário para a página de logon com a sessão ainda ativa. Pode parecer o comportamento que seu aplicativo apresenta quando o tempo limite da sessão se torna mais fácil, confundindo um com o outro.

<system.web>
    <authentication mode="Forms">
          <forms timeout="50"/>
    </authentication>

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

Definir o tempo limite dos formulários para algo menor que o tempo limite da sessão pode fornecer ao usuário uma janela na qual efetuar login novamente sem perder nenhum dado da sessão.

HectorMac
fonte
@ Inquebrável em minutos.
Reorganizador de palavras
43

Eu não sei sobre web.config ou IIS. Mas acredito que a partir do código C # você pode fazer isso como

Session.Timeout = 60; // 60 is number of minutes
Dmitris
fonte
21
Isso ajustará apenas o tempo limite da sessão atual? Ou isso ajustará o tempo limite de todo o aplicativo?
Johncl
2
Nada na documentação indica que a configuração Session.Timeoutseja diferente de usar o web.config ou o IIS, portanto, presumo que seja para todo o aplicativo.
Drasive
Acho que a @Drasive está certa, mas deve ser comprovada pelo menos por 2 clientes conectados separados ao servidor e verificar o tempo limite da sessão ociosa.
QMaster 28/03
42

Use o seguinte bloco de código no seu arquivo web.config. Aqui, o tempo limite da sessão padrão é de 80 minutos.

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

Use o link a seguir para Tempo limite da sessão com mensagem de alerta pop-up.

Exemplo de tempo limite da sessão

FYI: Os exemplos acima são feitos com o controle pop-up devexpress, portanto você precisa personalizar / substituir o controle pop-up devexpress pelo controle pop-up normal. Se você estiver usando o DevExpress, não é necessário personalizar

Rama Subba Reddy M
fonte
cookieless false?
73818 Kiquenet
3
@Kiquenet, se você definir o cookieless como true, o seu sessionId será incorporado no URL, o que representa um alto risco de segurança. A estrutura do ASP.NET insere um ID exclusivo na URL. Você pode verificar isso desativando o cookie ou definindo o atributo cookieless como true. De acordo com o MSDN, por padrão, o valor de SessionID é armazenado em um cookie de sessão que não expira no navegador, mas se você especificar cookieless = "true", o ASP.NET manterá o estado da sessão sem fogão inserindo automaticamente um ID de sessão exclusivo no URL da página .
Hamza Khanzada
8

Você tem alguma coisa no machine.config que possa estar entrando em vigor? Definir o tempo limite da sessão no web.config deve substituir as configurações do IIS ou machine.config; no entanto, se você tiver um arquivo web.config em algum lugar de uma subpasta do seu aplicativo, essa configuração substituirá a que está na raiz do seu aplicativo.

Além disso, se bem me lembro, o tempo limite no IIS afeta apenas as páginas .asp, não .aspx. Você tem certeza de que o código da sua sessão no web.config está correto? Deve ser algo como:

<sessionState
    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    stateNetworkTimeout="60"
    sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
    cookieless="false"
    timeout="60"
/>
Cᴏʀʏ
fonte
8

Na minha situação, era o Pool de Aplicativos. Ele está configurado para reiniciar quando ocioso por xx minutos. Quando eu o defino para não reiniciar, ele parece usar o valor do Web Config.

lorde
fonte
Sei que estamos em 2020, mas caramba, isso resolveu meu problema, obrigado!
Binary9 25/06
8

Isso geralmente é tudo o que você precisa fazer ...

Tem certeza de que, após 20 minutos, a razão pela qual a sessão está sendo perdida é por estar ociosa ...

Há muitas razões pelas quais a sessão pode ser limpa. Você pode ativar o log de eventos para o IIS e, em seguida, usar o visualizador de eventos para ver os motivos pelos quais a sessão foi cancelada ... talvez você ache que é por outros motivos?

Você também pode ler a documentação para mensagens de eventos e a tabela de eventos associada .

davidsleeps
fonte
3

Se você estiver usando autenticação, recomendo adicionar o seguinte no arquivo web.config.

No meu caso, os usuários são redirecionados para a página de login após o tempo limite:

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>
amar beeharry panray
fonte
I obteve o erro de aqui <authentication mode = "Forms"> depois que eu colocá-lo em web.config
Lst Patrick
2

Como o ASP.Net core 1.0 (vNext ou qualquer outro nome é usado), as sessões são implementadas de maneira diferente. Eu mudei o valor tempo limite da sessão em Startup.cs, void ConfigureServicesusando:

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

Ou, se você quiser usar o appsettings.jsonarquivo, poderá fazer algo como:

// Appsettings.json
"SessionOptions": {
    "IdleTimeout": "00:30:00"
}

// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));
Matty
fonte
2

Você pode encontrar a configuração aqui no IIS:

Configurações

Pode ser encontrado no nível do servidor, site ou aplicativo em "ASP".

Eu acho que você pode configurá-lo no nível web.config aqui. Por favor, confirme isso por si mesmo.

<configuration>
   <system.web>

      <!-- Session Timeout in Minutes (Also in Global.asax) -->
       <sessionState timeout="1440"/>

   </system.web>
</configuration>
Christian Findlay
fonte
Também no Global.asax?
77818 Kiquenet
1

O valor do tempo limite das sessões do IIS é apenas para aplicativos .asp clássicos, isso é controlado na configuração do IIS. No seu caso Para aplicativos ASP.NET, apenas o valor de tempo limite especificado pelo web.config se aplica.

Carlos E
fonte
E o tempo limite do pool de aplicativos do IIS?
SteveCav
1

O tempo limite da sessão padrão é definido no IIS para 20 minutos

Siga os procedimentos abaixo para cada site hospedado na Web do IIS 8.5

Configuração de tempo limite do IIS

Abra o Gerenciador do IIS 8.5.

Clique no nome do site.

Selecione "Editor de configuração" na seção "Gerenciamento".

Na lista suspensa "Seção:" na parte superior do editor de configuração, localize "system.web / sessionState".

Defina o "tempo limite" como "00:20:00 ou menos", usando o valor mais baixo possível, dependendo do aplicativo. Os valores aceitáveis ​​são 5 minutos para aplicativos de alto valor, 10 minutos para aplicativos de valor médio e 20 minutos para aplicativos de baixo valor. aplicações de valor.

No painel "Ações", clique em "Aplicar".

Guicb
fonte
0

se você deseja que o tempo limite da sessão para o site seja removido

<authentication mode="Forms">
      <forms timeout="50"/>
</authentication>

tag do arquivo web.config.

Nayan Hodar
fonte
-1

A propriedade Timeout especifica o período de tempo limite atribuído ao objeto Session para o aplicativo, em minutos. Se o usuário não atualizar ou solicitar uma página dentro do período de tempo limite, a sessão será encerrada.

IIS 6.0: O valor mínimo permitido é 1 minuto e o máximo é 1440 minutos.

Session.Timeout = 600;
Muhammad Awais
fonte
-2

Após alterar o valor do tempo limite da sessão no IIS, reinicie o IIS. Para conseguir isso, vá para o prompt de comando. Digite IISRESET e pressione Enter.

Varun R
fonte
A edição do arquivo web.config faz com que o IIS seja redefinido automaticamente.
Timothy Gonzalez