2011-01-18 21 views
8

Tengo dos sitios web con proveedores de membresía auto escritos que se alojan en el mismo servidor en la misma Web en diferentes aplicaciones web y diferentes grupos de aplicaciones.asp.net 'Remember me' ya no funciona con la autenticación de formularios

Anteriormente tuve el problema, que no podía iniciar sesión en ambos sitios juntos. Gracias a Remy's post, esto funciona ahora, tuve que agregar name -tributo al elemento forms.
Pero ahora tengo el problema de que la opción remember-me del asp login-control se detuvo para funcionar. El usuario se desconecta después del tiempo de espera de la sesión normal.

Los authentication- atributos en el aspecto archivo web.config de la siguiente manera:

<authentication mode="Forms" > 
    <forms loginUrl="~/UserMgmt/Login.aspx" timeout="400000" slidingExpiration="true" name="NameOfTheSite"/> 
</authentication> 

También he puesto el nombre de la cookie para el authetication formas a diferentes nombres.

¿Hay algo más que deba agregar para que funcione la función de recordarme?

actualización
he observado que al inhabilitar el cifrado y la validación de la autenticación de formularios en cookies, el problema se ha ido. Si activo el cifrado, la validación o ambos, el problema ocurre nuevamente.
También sé que es independiente de los nombres de las cookies de sesión (incluso podrían ser idénticos). ¿Tal vez esta información ayuda a alguien a descubrir qué está pasando?

Actualización 1
Gracias a Jason Kealey para la solución a este problema. Nunca lo habría encontrado. Mientras tanto, he encontrado la información correspondiente en msdn. En How To: Configure MachineKey in ASP.NET 2.0 en la sección "Consideraciones de implementación de servidores Web" se escribe:

Si desea aislar la aplicación de otras aplicaciones en el mismo servidor, coloque el <machineKey> en el archivo Web.config de cada aplicación en cada servidor en la granja Asegúrese de usar valores de clave separados para cada aplicación, pero duplique las claves de cada aplicación en todos los servidores de la granja de servidores.

+0

Eso es lo que tengo. ¿Has eliminado las cookies existentes? – Remy

+0

@Remy: No, no funcionó, pero de todos modos ¡fue una buena idea! – HCL

+0

¿Qué sucede si cambia el tiempo de espera a algo así como 7 días (10080) en lugar de 277+ (400000) días? –

Respuesta

9

El problema puede ser que usted tiene las claves de validación que se generan de forma automática cada vez que inicie la proceso de trabajo La cookie está encriptada, pero cuando vuelve, se utiliza una nueva clave del lado del servidor y, por lo tanto, su cookie no se puede descifrar.

Mira la sección de machineKey http://msdn.microsoft.com/en-us/library/ff649308.aspx

Aquí es algo que va a generar la sección machineKey para usted http://www.qualitydata.com/products/aspnet-membership/help/configuration/no-machinekey.aspx

+0

Debo admitir que no entiendo lo que significa su respuesta (porque mi conocimiento sobre asp.net es escaso). ¿Cuál es el proceso del trabajador y por qué se relanzó? ¿Es este el proceso en el que IIS aloja la web? Si es así, por qué este problema ocurre solo cuando tengo dos proveedores de membresía. Si solo tengo uno, todo funciona bien. Además, si leo los documentos vinculados, todos dicen que debo configurar la sección de clave de máquina si mi aplicación se ejecuta en una granja de servidores web o si deseo compartir el inicio de sesión entre las aplicaciones. Pero no quiero ninguno de los dos, explícitamente no compartir el inicio de sesión entre las aplicaciones. – HCL

+0

Dado que la desactivación de la validación hace que todo funcione, creo que cada vez que se restaura el grupo de aplicaciones (proceso de trabajo de IIS), se genera una nueva clave que utiliza para validar la cookie del usuario cuando regresa a su sitio. Se puede restablecer debido a inactividad o debido a una serie de razones. (Y la nueva clave no puede descifrar el contenido de la visita anterior, ya que no es el mismo que el inicial). Intente agregar algo generado con la herramienta anterior y avísenos si funciona. –

+0

Creo que esta es la solución más probable dados los hechos. – Greg

2

Intenta establecer el nombre de dominio para asegurarse de que la cookie del recuerdo se ha ajustado correctamente en todos los casos

<forms path="/" domain="nameof.com" ...the rest 
+0

+1 No fue una suerte también con esto, pero especifcar el dominio y, sobre todo, establecer el camino fue un gran intento. – HCL

+0

@HCL también verifica la configuración de cookies anónimas. – Aristos

0

El tiempo de espera de cookie también está limitada por IIS y por defecto a algo bajo como 20 min. Para cambiar esto:

  1. Abra el Administrador de IIS.
  2. Haga clic derecho en su sitio y seleccione propiedades.
  3. Seleccione la pestaña ASP.NET y haga clic en Editar configuración.
  4. Seleccione la pestaña Autenticación.
  5. Seleccione Habilitar caducidad deslizante.
  6. Establezca el tiempo de espera de la cookie en un valor de más largo. Para establecer a 30 días, ingrese 30.00: 00: 00.
  7. Haga clic en Aceptar y salga de IIS Manager.

enter image description here

Cuestiones relacionadas