2009-08-10 20 views
5

Estoy usando OutputCache en mi página que tiene un control de usuario, pero no quiero guardar en caché este control de usuario específico porque está relacionado con un inicio de sesión de usuario (si accedo a la página, veo la página como si estuviera autenticado con otro usuario).¿Cómo no almacenar en caché un control de usuario de ASP.NET?

¿Cómo puedo hacer eso?

Respuesta

10

Personalmente yo uso el atributo VaryByCustom en hacerle conectado y salido con usuarios diferentes páginas vistas en caché:

<%@ OutputCache VaryByCustom="IsLoggedIn" Duration="30" VaryByParam="*" %> 

después en global.asax se puso

public override string GetVaryByCustomString(HttpContext context, 
    string arg) 
{ 
    if (arg == "IsLoggedIn") 
    { 

     if (context.Request.IsAuthenticated) 
     { 
      return "Logged in: " + context.User.Identity.Name; 
     } 
     else 
     { 
      return "Not Logged In"; 
     } 

    } 
    else 
    { 
     return base.GetVaryByCustomString(context, arg); 
    } 

} 

sólo voy a tirar esto por ahí ¿Qué tal el control de sustitución?

http://msdn.microsoft.com/en-us/library/ms228212.aspx

Según el sitio web de MSDN:

control de la sustitución le permite crear áreas de la página que puede ser actualiza dinámicamente y luego integrado en una página en caché. ... El control de sustitución ofrece una solución simplificada a la página parcial almacenamiento en caché para páginas donde la mayoría del contenido está en caché. Puede salida-almacenar en caché toda la página, y luego usar los controles de Sustitución para especificar las partes de la página que están exentas del almacenamiento en caché.

Nunca he usado el control de sustitución personalmente, pero el otro día lo busqué y parecía que de alguna manera puede inyectar contenido actualizado en un resultado de página en caché.

1

Puede almacenar en caché una página y puede almacenar en caché un control de usuario, pero no puede almacenar en caché una página a excepción de un control de usuario. Cuando se ejecuta el control de usuario, debe ejecutarse toda la página. Debe hacer que el caché de salida de la página reconozca a los diferentes usuarios.

Puede usar VaryByHeader="Cookie" para almacenar en caché la página de cada conjunto de cookies si la identidad del usuario se almacena en una cookie. Puede usar VaryByCustom="SomeString" e implementar una comprobación para SomeString para realizar su propio control de identidad de usuario en el método GetVaryByCustomString en Global.asax.

Cuestiones relacionadas