/ / Desconectar estranho no site da ASP.NET 3.5 - asp.net, .net, vb.net, sessão, .net-3.5

Fazer logoff estranho no site da ASP.NET 3.5 - asp.net, .net, vb.net, session, .net-3.5

Por favor, ajude-me Estou ficando desesperado tentando encontrar o problema, e não sei por onde começar a procurá-lo.

Aqui estão os sintomas:

Eu notei que, quando um usuário faz logon pela manhã, ele é imediatamente desconectado e, em seguida, quando ele faz logon novamente, está tudo bem e ele pode trabalhar no site.

De vez em quando, quando o usuário clica em um link, a página leva muito tempo para ser carregada, mas nunca é carregada, e o usuário é direcionado para a página de login.

Além disso, após uma exceção ter ocorrido no site, o usuário é lançado na página de login. É como se a exceção resolvesse de alguma forma a sessão.

Algum de vocês sabe de uma situação em que isso possa acontecer?

O código que utilizo em todas as páginas da minha aplicação é o seguinte:

If (Not User.Identity.IsAuthenticated) Then
Response.Redirect("../login2.aspx")
End If

" If session timeout then return to login screen "
If ((Session("LocationId") Is DBNull.Value) Or (Session("LocationId") Is Nothing))
Then
Response.Redirect("../login2.aspx")
End If

O código no web.config:

<sessionState cookieless="false" timeout="600" />
<authentication mode="Forms">
<forms timeout="600" />
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>

Respostas:

1 para resposta № 1

Por que você está usando esse código em todas as páginas?

A autenticação e autenticação do .NET normalmente cuidam de todas essas coisas se você as tiver configurado corretamente.


1 para resposta № 2

Relacionado a este cenário * `

".... após uma exceção ter ocorrido no site, o usuário é então lançada na página de login. É como se a exceção limpa de alguma forma o sessão

Eu sei de uma possível situação em que isso pode ocorrer. É muito procurado, especialmente em um scenaio de produção por várias razões, mas eu já vi isso acontecer :-)

Se a sessão estiver na memória e o registro estiver concluídoescrevendo em um arquivo de log que está no diretório Bin do aplicativo, isso pode ocorrer como modificar a pasta bin dos resultados do aplicativo da web no reinício do aplicativo, ou seja, a sessão in memory sendo perdida.

Apenas um cenário possível. Se a sua sessão não estiver na Memória OU o seu mecanismo de registro não for assim, isso não se aplica a você.


0 para resposta № 3

Estou me voltando para todos os especialistas em redes de pontos por aí porque estou realmente desesperado,

deixe-me dar outro sintoma do problema porque ainda persiste,

o servidor é um servidor muito forte - intel xeon com um ram de 3 GB, então provavelmente não é um problema de recursos.

Quando o usuário usa o sistema continuamentenão é problema e ela pode trabalhar livremente, o problema surge quando o usuário deixa o computador (ou o aplicativo para essa matéria) por até 5 minutos, então quando ela quer continuar trabalhando e clica em um link no aplicativo ela é lançada para a página de login. Quando ela tenta se logar novamente, ela consegue, mas depois que ela clica em outro link, ela é expulsa novamente, então quando ela logins ela pode trabalhar livremente e está tudo bem.

De alguma forma, a sessão está sendo limpa quando o site está ocioso. deixe-me enfatizar que isso não acontece quando eu executo o aplicativo no visual studio, apenas no iis.

O aplicativo foi convertido do asp.net 2.0 para 3.5,

é isso, obrigado


0 para a resposta № 4

Primeiro de tudo, você precisa negar o acesso para usuários não autenticados (anônimos):

<authorization>
<deny users="?" />
</authorization>

Você configurou as páginas padrão e de login?

<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="Login.aspx" defaultUrl="Default.aspx" slidingExpiration="true" timeout="30" />
</authentication>

name define o nome de um cookie, útil se você usar a infraestrutura de segurança interna do .NET 2.0 (funções, associação etc.)

slidingExpiration comportamento de tempo limite normal ativado - qualquer ação do usuário redefine o tempo limite


0 para a resposta № 5

Se você está apenas usando a sessão normalfuncionalidade em asp.net Eu acredito que a sessão expira após 15-30 minutos de inatividade (eu normalmente não uso sessão para que eu lembre-se que está em algum lugar neste intervalo). Cada postback para o servidor redefine este temporizador por isso, se um usuário está ativo fazendo as coisas, então eles não vão bater desta vez.

Para a página levar muito tempo para carregar, émuito provavelmente devido à reciclagem do processo do operador e que o usuário é o primeiro usuário a acessar o site após uma reciclagem que aciona o IIS para fazer todas as coisas de compilação e depois veicular a página que causa o atraso. Isso só acontece pela primeira vez. visitante após uma reciclagem de processo de trabalho.Você pode alterar esse comportamento no IIS para acontecer em um agendamento em vez de após um determinado período de tempo passou sem atividade.Isso fará com que seu processo de trabalho ocupar mais memória embora dependendo do seu ambiente pode não ser uma boa mudança para fazer.

EDITAR: Eu devo acrescentar que o código que você postou explica exatamente porque o usuário é chutado de volta para a página de login. Ele está verificando para ter certeza de que há algo na sessão e, se não houver nada, o usuário volta para a página de login. Portanto, se eles ficarem inativos por muito tempo, a sessão expira, então ela é desmarcada e o usuário é chutado de volta para a página de login pelo seu código.Também você deve usar FormsAuthentication.RedirectToLoginPage (), para o seu redirecionamento em vez de Response.Redirect.Então, após o login, eles voltam para a página que eles pediram originalmente.