Pregunta

Después de buscar mucho no he tenido ninguna respuesta y finalmente tuve que volver a usted. A continuación te explico mi problema en detalle. Es demasiado largo, así que por favor no dejar de leer. He explicado mi problema en un lenguaje sencillo.

He estado desarrollando un proyecto asp.net mvc. Estoy utilizando las funciones de ASP.NET estándar y membresía. Todo funciona bien, pero la funcionalidad recuérdame no funciona en absoluto. Estoy enumerando todos los detalles del trabajo. Espero que ustedes me puede ayudar a resolver este problema.

Simplemente necesito esto:

Necesito de usuario para iniciar sesión en la aplicación web. Durante inicio de sesión que pueden acceder ya sea conmigo o sin ella recuerda. Si usuario se conecta conmigo recuerden, quiero navegador para recordar ellos por mucho tiempo, digamos que al menos el tiempo de un año o considerablemente largo. La forma en que lo hacen en www.dotnetspider.com, www.codeproject.com, www.daniweb.com y muchos otros sitios. Si usuario se conecta sin que yo recuerde, a continuación, el navegador debe permitir el acceso a la página web durante unos 20 -30 minutos y después de que la sesión debe expirar. Su sesión también debe expirar al usuario se conecta y se apaga el navegador sin tener que salir.

Nota: He implementado con éxito por encima de la funcionalidad sin necesidad de utilizar las funciones de ASP.NET estándar y de miembros mediante la creación de mis propios talbes para el usuario y autenticar contra mi tabla de la base, el establecimiento de cookies y sesiones en mis otros proyectos. Pero para este proyecto que comenzando desde el principio utilizado las funciones de ASP.NET estándar y membresía. Pensamos que va a trabajar y después de todo lo que fue construido en el momento de la prueba que no funcionó. y ahora no podemos reemplazar la funcionalidad existente con las funciones de ASP.NET estándar y de miembros con mis propias tablas de usuario personalizada y toda la materia, a entender lo que estoy taling aproximadamente.

O hay algún tipo de error con las funciones de ASP.NET estándar y funciones de miembro o tengo todo el concepto de funciones de ASP.NET estándar y de miembros equivocado. ya he dicho lo que quiero anteriormente. Creo que es muy simple y razonable.

Lo que hice

  1. Formulario de acceso con nombre de usuario, contraseña y me recuerde campo.
  2. Mi configuración en web.config:



  3. Mi acción del controlador, tengo esto:

    FormsAuth.SignIn (nombre de usuario, rememberMe);

    public void SignIn (cadena usuario, bool createPersistentCookie)  {    FormsAuthentication.SetAuthCookie (nombre de usuario, createPersistentCookie);  }

Ahora los problemas son los siguientes:

Ya he indicado en la sección anterior "Simplemente necesito esto". usuario puede iniciar sesión correctamente en el sistema. existe la sesión de tantos minutos como se especifica en el valor de tiempo de espera en web.config. También he dado una muestra de mi web.config. En mi samplem si fijo el tiempo de espera de 5 minutos, a continuación, sesión de usuario expira después de 5 minutos, eso está bien. Pero si el usuario cierra el navegador y volver a abrir el navegador, el usuario todavía puede entrar en el sitio web sin autenticarte en el tiempo hasta el especificado en "tiempo de espera" no se haya desmayado. El plazo de caducidad para el valor de tiempo de espera también se está trabajando muy bien. Ahora bien, si usuario inicia sesión en el sistema con recordar me registró, sesión de usuario expira aún después de 5 minutos. Este no es un buen comportamiento, es ?. Quiero decir que si usuario inicia sesión en el sistema con recordar me registró él debe ser recordado por mucho tiempo hasta el que no cierra la sesión del sistema o el usuario no elimina manualmente todas las cookies del navegador. Si usuario entra en el sistema sin tener en cuenta me registró su sesión debe expirar a los valores de tiempo de espera especificado en web.config y también si los usuarios se cierra el navegador. El problema es que si el usuario cierra el navegador y vuelve a abrir aún puede entrar en la web sin necesidad de acceder.

I de búsqueda de Internet mucho sobre este tema, pero no pude conseguirla solución. En la entrada del blog ( http://weblogs.asp.net/ ScottGu / archivo / 2005/11/08 / 430011.aspx ) hecha por Scott Gu exactamente en el mismo tema. Los usuarios se quejan de lo mismo en sus comentarios ut no existe una solución fácil dada por el señor Scott.

Lo leí en los lugares siguientes: http://weblogs.asp.net/scottgu/archive/2005 /11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14 /91191.aspx

Creo que este es un problema de mucho de la de los usuarios. Como parece de entrada del blog hecha por Scott Gu.

Su ayuda será muy apreciada. Gracias de antemano.

¿Fue útil?

Solución

Lo que se quiere hacer es tener un tiempo de espera diferente cuando está marcada la opción RememberMe, que cuando está sin marcar. Por desgracia, el método SetAuthCookie no le permite establecer la expiración de forma manual, por lo que tendrá que hacer eso mismo.

El problema es entonces, cómo hacerlo?

ASP.NET MVC utiliza la clase de FormsAuthentication System.Web.Security de hacer eso, porque no es trivial si también quiere apoyar a las opciones de configuración y navegación sin cookies y SSL, pero creo que si lo único que hace esto:

int timeout = rememberMe ? 525600 : 30; // Timeout in minutes, 525600 = 365 days.
var ticket = new FormsAuthenticationTicket(userName, rememberMe, timeout);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);// Not my line
cookie.HttpOnly = true; // cookie not available in javascript.
Response.Cookies.Add(cookie);

... obtendrá una versión básica de lo que necesita.

NOTA:. No he probado este código

Otros consejos

Kevin y Dave, ustedes roca, hombre.

a Dave, además de su código que tenía que añadir una línea más para hacer que funcione. Me refiero a que sea recordado por lo menos un año. Tenía que asignar un valor a cookie.Expires, además de su código para hacer que funcione. Si esta línea cookie.Expires no se establece la cookie se pierde después de reiniciar el equipo me refiero al final de la sesión. Me di cuenta de esto en Firefox. Fui a través de los detalles de la galleta y me encontré: Si cookie.Expires no se establece a continuación, el valor de "Expira:" atributo en Firefox es "Al final de la sesión" pero si cookie.Expires se establece a continuación, el valor de "Caducidad :." atributo en Firefox es la fecha y hora se estableció el valor cookie.Expires

Este es el código:

int timeout = createPersistentCookie ? 525600 : 2; // Timeout in minutes,525600 = 365 days
var ticket = new FormsAuthenticationTicket(userName,createPersistentCookie,timeout);            
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);//My Line
HttpContext.Current.Response.Cookies.Add(cookie);

Gracias chicos, que era realmente una gran solución.

Sólo una pequeña nota sobre el uso de entradas de miembros de autenticación en un entorno compartido para cualquier persona que pueda aterrizar aquí con ese tema. Tengo un sitio MVC runnig en GoDaddy y tenía problemas para recordar conmigo. Esta fue la solución:

<system.web>
<machineKey
  validationKey="4C6404A3B305CD6E8CFEAC258F042FB95E45E9C3C2CEC3AAB838996CFBE661E41DF1A1BAC75B9B45E02147612FD9B71CA74DDA50B0D0D6ED11F0BB8E31048953"
  decryptionKey="BC471CF17A97B08A9DF85C7B502AD95680E3BE4418FD9C6CEA57E7F97ED64291"
  validation="SHA1" decryption="AES"
/>

Gracias a: http://www.geekfreeq.com/aspnet -Recuerde-me-opción-formas-autenticación-no-trabajo /

Eso no es un problema, es una característica:)

La sesión del usuario no ha expirado aún así, incluso si se cierra y vuelve a abrir el navegador, la cookie sigue siendo buena.

Es de caducidad de la cookie que invalida la sesión del usuario.

Me había implementado misma cosa y cuando lo prueba que funciona bien en Mozila pero no funciona en IE8 para toda la PC, yo también había actualizado configuración para aceptar cookies en IE pero aún no funciona.

Internet Explorer 8.x

  1. Haga clic en el menú Herramientas-.
  2. Seleccione Opciones de Internet en el menú - se abre una nueva ventana.
  3. Haga clic en la pestaña de privacidad cerca de la parte superior de la ventana.
  4. Haga clic en el botón predeterminado de la ventana.
  5. Mover el cursor de modo que está en uno de los niveles por debajo Medio Alto (incluyendo media, baja, Aceptar todas las cookies).
  6. Guarde los cambios haciendo clic en Aceptar.
  7. Usted debe ser capaz de añadir artículos a su carrito de la compra ahora.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top