Foros del Web » Programando para Internet » PHP » CodeIgniter »

[APORTE] Uso de cache: como evitar cachear contenidos de usuarios logueados

Estas en el tema de [APORTE] Uso de cache: como evitar cachear contenidos de usuarios logueados en el foro de CodeIgniter en Foros del Web. Hola gente Estube probando la implementacion de la cache ...y alguna complicacion tecnica a pesar de ser una 'gran cosa'. Un usuario logueado ve un ...
  #1 (permalink)  
Antiguo 12/07/2011, 17:42
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
[APORTE] Uso de cache: como evitar cachear contenidos de usuarios logueados

Hola gente

Estube probando la implementacion de la cache...y alguna complicacion tecnica a pesar de ser una 'gran cosa'.

Un usuario logueado ve un panel de control...y el sitio tiene un diseño diferente incluso al del usuario no-logueado pero con el uso de la cache...... se muestra el panel a quien no debe y viceversa!

Una solucion posible URLs agregandoles #logued o ?logued al final para que la cache las vea diferentes pero eso implica:

1) En cada link, form, etc... agregar el #logued / ?logued si esta logueado
2) Re-dirigir si no tiene la marca y esta logueado porque puede venir de un buscador.

Algo mas facil ? aca MI solucion implementada con CodeIgniter:

MY_url_helper.php
Código PHP:
<?php
    
function anchor($uri ''$title ''$attributes '')
    {
        
$title = (string) $title;
        
        
/* agreado! */
        
if (is_logged()){
          
$uri .= '?logued';
        }

        if ( ! 
is_array($uri))
        {
            
$site_url = ( ! preg_match('!^\w+://! i'$uri)) ? site_url($uri) : $uri;
        }
        else
        {
            
$site_url site_url($uri);
        }

        if (
$title == '')
        {
            
$title $site_url;
        }

        if (
$attributes != '')
        {
            
$attributes _parse_attributes($attributes);
        }

        return 
'<a href="'.$site_url.'"'.$attributes.'>'.$title.'</a>';
    }

    function 
full_url($protocol='http') {
        
//$protocol = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http'; 
      
return $protocol.'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
      }
y en MY_Controller (clase que extiendo luego en vez de CI_Controller)

Código PHP:
class MY_Controller extends CI_Controller{

   function 
__construct(){    
    
parent::__construct();                  
  
      if (
is_logged()){               
        if (!
strstr(full_url(),'?logued')){    
          
redirect (current_url().'?logued');
        }
         }
   ...            
  }
..

Con eso funciona
__________________
Salu2!

Última edición por Italico76; 12/07/2011 a las 18:30
  #2 (permalink)  
Antiguo 12/07/2011, 20:41
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años
Puntos: 890
Respuesta: [APORTE] Uso de cache: como evitar cachear contenidos de usuarios logueado

Y por que no usas la misma session del usuario para evitar mostrar la cache en lugar de hacer todo eso?
__________________
Drupal Argentina
  #3 (permalink)  
Antiguo 12/07/2011, 20:47
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: [APORTE] Uso de cache: como evitar cachear contenidos de usuarios logueado

Cita:
Iniciado por NUCKLEAR Ver Mensaje
Y por que no usas la misma session del usuario para evitar mostrar la cache en lugar de hacer todo eso?
NUCKLEAR amigo: el tema es como trabaja la clase cache en CI

Una vez que cachea una pagina, se la muestra a todos los usuarios y no hay forma* de des-habilitarla...solo de evitar que guarde una pagina.

Luego... si esta logueado, no uso la cache... NI me muestra el contenido de la pagina cacheada de no-logueados.

Se entiende ? el tema es que si solo hago:

Código PHP:
 if (!is_logged()) {
        
$this->output->cache(10);
 } 
No gano nada!! por que ? porque igual LEE la pagina cacheada si existe

(*) Como haber si.. seria "extendiendo" la clase cache...y cambiandole el funcionamiento....para que exista la funcion de des-habilitar la lectura...pero opté (quizas me equivoque) por evitar pueda cachear ciertas paginas (urls) cambiandoles algo.

__________________
Salu2!

Última edición por Italico76; 12/07/2011 a las 20:55
  #4 (permalink)  
Antiguo 13/07/2011, 21:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: [APORTE] Uso de cache: como evitar cachear contenidos de usuarios logueado

Bueno....se me presentó un problema inesperado: el agregar ?logued a cada url, dejan de funcionar los formularios (por POST, claro)



En fin...me toca modificar el sistema de cache de CI...o buscar algun plugin
__________________
Salu2!
  #5 (permalink)  
Antiguo 13/07/2011, 23:06
Avatar de pablofmorales  
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 222
Antigüedad: 16 años, 7 meses
Puntos: 37
Respuesta: [APORTE] Uso de cache: como evitar cachear contenidos de usuarios logueado

No entiendo bien el problema.

pero si te ayuda, hay una regla general que dice "NO TOQUES EL CORE"

Si tenes que modificar la clase de Cache de CI, que seguramente sea horrible, lo que podes hacer es una clase intermedia y heredar de la clase de CI, cuando uses no usas la de CI sino la tuya.

No deberia ser difiil implementar una pagina para el manejo de cache la verdad es que no es algo complejo como para que te de dolores de cabeza.
__________________
blog
  #6 (permalink)  
Antiguo 14/07/2011, 07:11
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: [APORTE] Uso de cache: como evitar cachear contenidos de usuarios logueado

Buenas.....el tema fue... que no me di cuenta de desactivar la direccion despues de enviar a formularios

Obviamente con la re-direccion (sin parametros) se pierden los datos
__________________
Salu2!

Etiquetas: frameworks-y-php-orientado-a-objetos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:11.