Como definir o tempo limite da sessão no web.config

179

Eu tentei muito, mas não consigo encontrar uma solução sobre como definir o valor do tempo limite da sessão para uma sessão em processo de um aplicativo Web ASP.Net.

Estou usando o VSTS 2008 + .Net 3.5 + C #. Aqui está o que eu escrevi para definir o tempo limite para 1 minuto, está correto?

Eu escrevi na seção system.web no web.config

<sessionState timeout="1" mode="InProc" />
George2
fonte
5
A maneira como você define o tempo limite está correta. Você tem algum problema com isso?
Darin Dimitrov
7
Você sabe que isso significa que expirará após 1 minuto de inatividade, e não após 1 minuto do seu início? Meu palpite é que, se você está fazendo esta pergunta e digitou o tempo limite corretamente, pode se enganar em como ela funciona.
22670 Ivan Zlatanov
1
Eu preciso definir um tempo inativo, é exatamente o que eu preciso. Obrigado Ivan!
2010
RI MUITO! Eu não recomendaria definir o tempo limite para apenas 1 minuto. Isso vai matar a usabilidade!
Brian McCarthy
3
Compreendo completamente a necessidade de um curto período de tempo limite. No meu caso, é testar a usabilidade do site se a sessão expirar e como ela reage quando o usuário volta. É difícil testar isso ao mesmo tempo, a depuração a menos que o tempo limite de sessão ocorre rapidamente
Brett Weber

Respostas:

323

Se você deseja definir o tempo limite para 20 minutos, use algo como isto:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>
Wolfwyrd
fonte
16
20 minutos ou horas? (timeout = "20")
Muhammad Awais 28/07
21
Configuração afirma o limite de tempo em minutos para 20 minutos
Wolfwyrd
50

O valor que você está configurando no timeoutatributo é uma das maneiras corretas de definir o valor do tempo limite da sessão.

O timeoutatributo especifica o número de minutos que uma sessão pode ficar inativa antes de ser abandonada. O valor padrão para este atributo é 20.

Ao atribuir um valor 1 a esse atributo, você configurou a sessão para ser abandonada em 1 minuto após a inatividade.

Para testar isso, crie uma página aspx simples e escreva esse código no evento Page_Load,

Response.Write(Session.SessionID);

Abra um navegador e vá para esta página. Um ID de sessão será impresso. Aguarde um minuto para passar, e clique em Atualizar. O ID da sessão será alterado.

Agora, se meu palpite estiver correto, você deseja fazer com que seus usuários se desconectem assim que a sessão terminar. Para fazer isso, você pode criar uma página de login que verifique as credenciais do usuário e crie uma variável de sessão como esta -

Session["UserId"] = 1;

Agora, você precisará executar uma verificação em todas as páginas dessa variável como esta -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

Este é um exemplo básico de como isso funcionará.

Mas, para tornar seus aplicativos seguros com qualidade de produção, use as classes Funções e Associação fornecidas pelo ASP.NET. Eles fornecem autenticação baseada em formulários, que é muito mais confiável que a autenticação baseada em sessão normal que você está tentando usar.

Kirtan
fonte
Um ótimo conselho ... Certifique-se de definir uma variável Session primeiro antes de testar com Response.Write (Session.SessionID); caso contrário, ele será atualizado com um novo ID toda vez que você atualizar.
22418 Chris Catignani
1

Se você estiver usando o MVC, coloque isso no arquivo web.config no diretório Raiz do aplicativo Web, não no web.config no diretório Views. Ele também precisa estar no nó system.web, não como George2 afirmou em sua pergunta: "Eu escrevi na seção system.web no web.config"

O valor do parâmetro timeout representa minutos.

Existem outros atributos que podem ser configurados no elemento sessionState. Você pode encontrar informações aqui: docs.microsoft.com sessionState

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

Você pode capturar o início de uma nova sessão no arquivo Global.asax adicionando o seguinte método:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}
Keith Aymar
fonte
0

Use isso em web.config:

<sessionState 

  timeout="20" 
/>
Balaji Birajdar
fonte
30
Você não precisa da maioria dos atributos listados, timeoutrealmente. stateConnectionStringe sqlConnectionStringsão ignorados quando mode="InProc", e os valores para modee cookielesssão definidos com seus valores padrão. Então, isso realmente se resume à resposta de Wolfwyrd.
Arcain
0

Se não estiver funcionando web.config, é necessário configurá-lo no IIS.

asif jan
fonte