2009-01-12 25 views
6

Tengo un problema realmente grave en el que, sin importar lo que intento, el usuario se desconecta después de 10 minutos.Autenticación de formularios de ASP.Net Cerrar sesión a los usuarios después de 10 minutos

Estoy utilizando ASP.Net 2.0 ejecutándose en IIS 6.0 en Server 2003 R2 Standard Edition ejecutándose como un servidor virtual con todas las actualizaciones aplicables y .Net 3.5 SP1.

El cliente es Internet Explorer 7.0

A continuación se indican los ajustes web.config:

<!-- Authentication Mode --> 
<authentication mode="Forms"> 
    <forms name=".RecipeViewer" timeout="240" /> 
</authentication> 

a continuación es el código utilizado para establecer la cookie de autorización:

Private Sub SetCookie(userName) 
       ' Use security system to set the UserID within a client-side Cookie 
       Dim ticket As New FormsAuthenticationTicket(1,userName, DateTime.Now, DateTime.Now.Add(Me.GetFormsAuthSettings.Forms.Timeout), True, String.Empty, FormsAuthentication.FormsCookiePath) 
       Dim hash As String = FormsAuthentication.Encrypt(ticket) 
       Dim cookie As New HttpCookie(FormsAuthentication.FormsCookieName, hash) 

       cookie.HttpOnly = True 

       If (ticket.IsPersistent) Then 
        cookie.Expires = ticket.Expiration 
       End If 

       Response.Cookies.Add(cookie) 

       ' Redirect browser back to originating page 
       Response.Redirect(Request.ApplicationPath) 
End Sub 

    Private Function GetFormsAuthSettings() As System.Web.Configuration.AuthenticationSection 
     Return DirectCast(System.Configuration.ConfigurationManager.GetSection("system.web/authentication"), System.Web.Configuration.AuthenticationSection) 
    End Function 

estaba previamente utilizando FormsAuthentication.SetAuthCookie e incluso probando los métodos FormsAuthentication.RedirectFromLoginPage, pero ambos tuvieron el mismo resultado, por lo que terminé haciendo La implementación de cookie dura que se realiza internamente (a través de la visualización en Reflector) que hace la clase FormsAuthentication.


La cuestión es NO reproducible en el entorno de Visual Studio 2008 asp.net hosting o en IIS 7.0.


EDITAR: cookies están habilitadas, incluso el sitio alojado ha sido añadido como un sitio de confianza.


EDITAR: Google Chrome y Firefox no tienen este problema.


EDITAR: Verified cookie en el equipo de destino se fija para expirar después de 4 horas como por el ajuste (tiempo de espera = 240 minutos).


EDITAR: Como dice House, todo el mundo miente. El usuario en realidad no probó la nueva base de códigos y estaba siguiendo una noción preconcebida de que el software todavía estaba roto. Gracias a todos los que respondieron en este tema.

No cerrando esto por no ser más relevante, pero manteniéndolo para ayudar a las personas a solucionar el problema ya que hay algunas técnicas de resolución de problemas realmente buenas en esta pregunta.

+0

¿Usted ha visto si las cookies se guardan correctamente en el navegador usando Firebug y Firecookie? ¿Y verificó si los valores de las cookies se envían al servidor después de 10 minutos? –

+0

No estoy familiarizado con Firebug y FireCookie, ¿son estas extensiones de Firefox? –

+0

yap, http://getfirebug.com/ –

Respuesta

6

También podría (haber sido) que la clave de máquina no estaba configurada y, por lo tanto, se generara aleatoriamente cada vez que se inicializara la aplicación (lo que significaría que el ticket de autenticación encriptado sería salado con una nueva clave).

Yo uso un sitio para generar un nuevo machinekey para mis aplicaciones y pegarlo en el web.config:

http://www.orcsweb.com/articles/aspnetmachinekey.aspx

<?xml version="1.0"?> 

<configuration> 

    <appSettings/> 
    <connectionStrings/> 
    <system.web> 

     <machineKey validationKey='FED01BCB246D3477F5854D60388A701508AD1DF9099BD3CAC3CA4DAF55F7524B8DD3FA03133BBCA381BC1CD639730445968DFA633A97911187EF187456D692F4' decryptionKey='861E7DF7C2D04297EEFAD47FF3B95F54E87CF28D6C2753D8' validation='SHA1'/> 

    </system.web> 
</configuration> 
+1

+1 gran cosa de mantenimiento que hacer :) –

+0

muy buena solución. –

0

Recuerdo vagamente algo acerca de la configuración de tiempo de espera de la sesión IIS que puede anular lo que haya configurado en el archivo web.config. Verifique que las propiedades de su aplicación no establezcan un tiempo de espera de 10 minutos (propiedades-> configuración-> opciones).

+0

¿Esto afectaría la autenticación? en mi entorno de prueba puedo reconstruir la aplicación causando un re-jit (también nuevas sesiones) y la autenticación sigue siendo válida. –

+0

Posiblemente, pero no puedo estar seguro sin probarlo. – inferis

0

Tuve un problema similar en el pasado, pero no estoy seguro de que sea de lo que estás hablando. ¿Tengo razón en que su problema no ocurre en los sistemas de producción (o en cualquier sistema con carga frecuente)? Si es así, el problema puede ser el tiempo de espera inactivo del hilo del trabajador. Puede intentar cambiarlo o desactivarlo en Administrador IIS-> haga clic derecho en Grupos de aplicaciones, vaya a la pestaña Rendimiento, es la casilla de verificación en Tiempo de espera inactivo. Las cosas en la pestaña Reciclaje de ese diálogo también pueden ser de su interés.

+0

Al igual que con la pregunta anterior, ¿cómo se aplica el tiempo de espera de la aplicación o las cookies efecto de efecto de autenticación, estos deberían ser persistentes durante reinicios de sesión (como cómo este sitio te recuerda días, días y días ...) –

+0

Creo que dependerá de cómo los valores en las cookies de autenticación se almacenan en el servidor.Si se está utilizando un servidor de sesión, eso se mantendrá durante los reinicios, pero si tiene un tiempo de espera de sesión difícil, eso debería borrar ese servidor. – inferis

+0

el código completo de la cookie de autenticación está arriba, no tengo ningún código adicional para la autenticación, excepto la comprobación de IsAuthenticated. –

1

Aunque su requisito es IE, puede usar Firefox con Firebug y FireCookie para controlar sus cookies y caducidades.

En IE puede descargar IE Developer Toolbar, en la que puede ver sus valores de cookies utilizando el menú Caché \ Ver información de cookies.

Es extraño si funciona correctamente en Google Chrome, tal vez puede capturar la solicitud utilizando el evento Application_BeginRequest en el archivo global.asax y registrar las cookies recibidas y sus valores.

+0

Las cookies se verifican en los 3 navegadores, Firefox, Chrome e IE. –

+0

Los 3 están enviando las cookies durante los primeros 10 minutos, y luego IE ya no las envía (desde su máquina, no al entorno de desarrollo) después de esos 10 minutos. –

+0

Bien, ahora verificaría si algún complemento está limpiando las cookies o bloqueándolas –

1

Las excepciones no controladas podrían estar causando el reinicio del proceso. Esto podría agregarse al comportamiento extraño. ¿Hay algo reportado en los registros de eventos?

+0

+1 para sugerencia, pero nada en el registro de eventos. –

0

El cliente no ha probado el código de producción y todavía estaba respondiendo de la edición anterior antes de aplicar un parche a su entorno de producción.

Si no puede replicarlo en el mismo entorno, recomendaría una reunión en la que pueda ver cómo se replica el problema.


Marcando esto como respuesta después de 48 horas.

0

Cambiar el estado de sesión para almacenar el uso de InProc, es probable que enfrentan un problema similar al mío que cuando el usuario acertaba un error, la sesión básicamente estaba muriendo cada vez que no se almacenaba con InProc.

tipos de sesiones: http://msdn.microsoft.com/en-us/library/ms178586(v=vs.100).aspx

Cuestiones relacionadas