Tempo limite de autenticação de formulários versus tempo limite de sessionState

139

Eu tenho um código que estou pesquisando sobre o tempo limite da sessão no site. No web.config me deparei com esse código.

 <authentication mode="Forms">
  <forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" />
</authentication>

<sessionState timeout="30" />

Alguém sabe se um tem precedentes sobre o outro e como eles são diferentes. Obrigado.

Lucky Luke2
fonte
Possível duplicata do tempo limite de autenticação
Hüseyin Yağlı

Respostas:

226

São coisas diferentes. As formas valor Authentication Timeout define a quantidade de tempo em minutos que o cookie de autenticação é definida para ser válido, o que significa que, depois de valuevários minutos, o cookie expira eo usuário não vai mais ser autenticado, eles serão redirecionados para o login página automaticamente. O slidingExpiration=truevalor está basicamente dizendo que, enquanto o usuário fizer uma solicitação dentro do valor do tempo limite, ele continuará sendo autenticado (mais detalhes aqui ). Se você definir slidingExpiration=falseo cookie de autenticação expirará após um valuenúmero de minutos, independentemente de o usuário fazer uma solicitação dentro do valor do tempo limite ou não.

O SessionStatevalor do tempo limite define a quantidade de tempo que um provedor de Estado da Sessão é necessário para armazenar dados na memória (ou qualquer armazenamento de backup que estiver sendo usado, SQL Server, OutOfProc, etc) para uma sessão específica. Por exemplo, se você colocar um objeto na Sessão usando o valor no seu exemplo, esses dados serão removidos após 30 minutos. O usuário ainda pode estar autenticado, mas os dados na Sessão podem não estar mais presentes. O Session Timeoutvalor é sempre redefinido após cada solicitação.

Icaro
fonte
26
Um esclarecimento: o tempo limite de autenticação de formulários define o tempo de expiração para o ticket, não necessariamente para o cookie em que o ticket pode ser armazenado. O cookie pode não ter um prazo de validade (confundidamente chamado de cookie de sessão, o que significa que dura até o usuário fechar o navegador) ou pode até não haver um cookie (autenticação de formulários "sem cookies"). No caso de um cookie persistente, a autenticação de formulários define a expiração do cookie e a expiração do ticket para o mesmo tempo.
Bmode # 6/14
13
Outro esclarecimento do MSDN: "Para impedir o desempenho comprometido e para evitar vários avisos do navegador para usuários com os avisos de cookie ativados, o cookie é atualizado quando mais da metade do tempo especificado tiver decorrido." Portanto, o tempo limite do cookie é redefinido apenas se estiver pela metade. Daí a sugestão de configurá-lo para 2x o tempo limite da sessão.
usar o seguinte comando
21

O valor de slideExpiration = true está basicamente dizendo que, após cada solicitação feita, o timer é redefinido e enquanto o usuário fizer uma solicitação dentro do valor do tempo limite, ele continuará sendo autenticado.

Isso não está correto. O tempo limite do cookie de autenticação será redefinido apenas se metade do tempo limite tiver passado.

Consulte, por exemplo, https://support.microsoft.com/de-ch/kb/910439/en-us ou https://itworksonmymachine.wordpress.com/2008/07/17/forms-authentication-timeout-vs-session -tempo esgotado/

Silvan Hofer
fonte
18

Pelo que entendi, eles são independentes um do outro. Ao manter o tempo limite da sessão menor ou igual ao tempo limite da autenticação, você pode garantir que nenhuma variável de sessão específica do usuário seja persistida após o tempo limite da autenticação (se essa é a sua preocupação, que eu acho que é a normal quando perguntamos isso questão). Obviamente, você precisará lidar manualmente com o descarte de variáveis ​​de sessão no logout.

Aqui está uma resposta decente que pode responder à sua pergunta ou pelo menos apontá-lo na direção certa:

Assimétrico
fonte
7

A diferença é que um (tempo limite dos formulários) tem a ver com a autenticação do usuário e o outro (tempo limite da sessão) tem a ver com o tempo em que os dados armazenados em cache são armazenados no servidor. Portanto, são coisas muito independentes, de modo que um não tem precedência sobre o outro.

Karl Anderson
fonte
5
      <sessionState timeout="2" />
      <authentication mode="Forms">
          <forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
      </authentication>

Essa configuração me envia para a página de login a cada dois minutos, o que parece contrariar as respostas anteriores

shlasasha
fonte
1
Isso pode acontecer se as informações relacionadas ao login forem armazenadas nas variáveis ​​da sessão e, quando forem apagadas, elas serão redirecionadas para o login. Então isso depende do código?
21416 Steve Steve
0

Para quem se deparar com essa questão, consulte esta documentação da MS - ela possui realmente bons detalhes sobre a configuração de Tempo limite de autenticação de formulários.

Este documento explica detalhadamente o comentário que o bmode está fazendo na Resposta Aceita - sobre o Cookie Persistente (Sessão vs Expiração)

https://docs.microsoft.com/pt-pt/aspnet/web-forms/overview/older-versions-security/introduction/forms-authentication-configuration-and-advanced-topics-cs#specifying-the-tickets- valor de tempo limite

Naren
fonte