2010-02-01 22 views
26

El tiempo de espera de estado de sesión se ajusta con este elemento web.configLas diferencias en las formas de autenticación de tiempo de espera y tiempo de espera de la sesión

<sessionState mode="InProc" cookieless="false" timeout="120" /> 

La autenticación se forma se configuran mediante este elemento web.config

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" 
      protection="All" 
      timeout="30" 
      name=".ASPXAUTH" 
      path="/" 
      requireSSL="false" 
      slidingExpiration="true" 
      defaultUrl="default.aspx" 
      cookieless="UseDeviceProfile" 
      enableCrossAppRedirects="false" /> 
    </authentication> 
</system.web> 

¿Cuál es la diferencia entre los tiempos de espera especificados en cada uno de estos elementos? Si ambos son diferentes, ¿cómo funcionaría?

Respuesta

57

Una sesión comienza cada vez que un nuevo usuario visita el sitio web, independientemente de si son anónimos o no. La autenticación tiene muy poco que ver con la Sesión.

El tiempo de espera de autenticación es la cantidad de tiempo que la cookie de autenticación es válida en el navegador del usuario. Una vez que la cookie expira, deben volver a autenticarse para acceder a los recursos protegidos en el sitio. Por lo tanto, si la sesión expira antes de la cookie de autenticación, aún están autenticadas, pero todas sus variables de sesión desaparecen y pueden causar errores en su sitio web si no se le aplican controles para null y otras condiciones provocadas por falta sesión.

Si la Autenticación supera el tiempo de espera antes de la sesión, todas las variables de sesión seguirán existiendo, pero no podrán acceder a los recursos protegidos hasta que vuelvan a iniciar sesión.

+5

Excelente explicación. Solo quiero agregar que hay otra configuración de tiempo de espera importante que existe en IIS en el nivel del grupo de aplicaciones. IIS reiniciará el grupo después de que se haya alcanzado el tiempo de inactividad especificado, para liberar los recursos asignados. Debe asegurarse de que el tiempo de espera inactivo de la agrupación sea siempre mayor que los dos tiempos de espera mencionados anteriormente, o recibirá errores independientemente de en qué tiempo de la sesión o de las formas se establezca. – learner

+1

De hecho, excelente explicación. Al igual que @learner, quiero mencionar otra configuración, además de [tiempo de espera inactivo] (http://technet.microsoft.com/nl-nl/library/cc771956%28v=ws.10%29.aspx): [ Reciclaje del proceso de trabajo] (http://msdn.microsoft.com/en-us/library/aa720473%28v=vs.71%29.aspx). Por defecto, esto ocurre después de 29 horas y esto no es una expiración móvil. Si el modo de estado de la sesión es [en proceso] (http://msdn.microsoft.com/en-us/library/ms178586%28v=vs.100%29.aspx), las sesiones se borrarán cuando se realice el reciclaje. –

1

como se esperaba.

p. Ej. si su sesión expira después de 20 minutos, sus variables de sesión se perderán. pero el usuario podría acceder a las páginas que están protegidas por la autenticación.

si la autenticación expira, el usuario no pudo acceder a la página que protege y el estado de la sesión es irrelevante.

-3

El valor de tiempo de espera de la sesión debe ser menor que el tiempo de espera de FormsAuthentication. Porque Session se puede eliminar debido a un motivo y el escenario no funcionará.

Si la sesión expira, marque FormsAuthentication Ticket. Si el ticket es válido y no expira, vuelva a generar la sesión en su página de inicio de sesión (definida en su archivo web.config como parámetro LoginUrl de la configuración de FormsAuthentication).

Si se agota el tiempo de espera de FormsAuthentication, ASP.NET FormsAuthentication redirecciona al usuario automáticamente a la página de inicio de sesión y el usuario tiene que iniciar sesión de nuevo.

No olvide que FormsAuthentication redirige automáticamente al usuario a la página de inicio de sesión cuando se agota el tiempo de espera del ticket.

realidad, yo prefiero esta estructura:

  1. Crear un BasePage.cs para las páginas de inicio de sesión requerida.
  2. en Page_Init en BasePage.cs compruebe la sesión. Si la sesión expiró; redirige al usuario a la página de inicio de sesión.

    if (Session ["UserId"] == null) Response.Redirect ("Login.aspx", true);

  3. En Page_Load en Login.aspx, compruebe la sesión y los tiempos de FormsAuthentication Ticket correctamente.

    //User already have a session; redirect user to homepage. 
        if (SessionHandler.UserId != 0) 
         Response.Redirect("HomePage.aspx"); 
        else 
        { 
         //Session is killed; check Ticket is Valid or not 
         if (Context.User.Identity != null && Context.User.Identity.IsAuthenticated) 
         { 
          //Use Value of the FormsAuthentication 
          var customDataToCheck = Context.User.Identity.Name; 
    
          //Use value to check user is exist really and check db for user's session 
          var user = CheckUserData(customDataToCheck); 
          if (user != null) 
          { 
           //Start Session here 
           SessionHandler.StartSession(user); 
    
           //Redirect user to page what you want. 
           Response.Redirect("HomePage.aspx?ref=regenerated_session"); 
          }      
         } 
        } 
    
  4. en Login.aspx usar FormsAuthentication a crear cookies.

    si (nombre de usuario == "testuser" & & contraseña == "testpassword") { // Los datos de usuario se escriben en una cookie, almacenar datos de un usuario que se puede comprobar el usuario es válido o no (por Ejemplo de nombre de usuario o UserId).
    System.Web.Security.FormsAuthentication.SetAuthCookie ("testUserData", keepMeSignedInCheckBox.Checked); Response.Redirect ("HomePage.aspx"); }

Cuestiones relacionadas