Abogado Garza

Abogado Garza

Lawyer Web Page

ShuttleMexico

ShuttleMexico

Transport Company

MayaSpace

MayaSpace

Baby Patron | Web Personal

Deluxe Kool Decking

Deluxe Kool Decking

Reconstruction Decking

Ago
15

Sistemas de Cache y la versión movil del iphone

Escrito por Carlos Montalvo hace 4 meses y 2 semanas, archivado en Desarrollo Web

En una entrada anterior hablamos sobre emular el iphone bajo Firefox para testear nuestras paginas en la versión móvil.

El problema empieza cuando se usa un sistema de cache interno.

Análisis del Problema

  1. Un usuario visita una sección de nuestra pagina desde cualquier explorador, entonces dicha pagina se cachea.
  2. Otro usuario visita la misma sección desde un iphone, lógicamente debería mostrar la versión móvil pero el sistema de cache devolverá la versión normal de la sección la cual estaba cacheada.
  3. Esto causa un conflicto entre la versión normal y la versión móvil y viceversa.

Solución

Sea cual fuese el sistema de cache debemos evitar el inicio y la verificación del sistema de cache en nuestras paginas cuando se navegue por el iphone, esto se logra filtrando el UserAgent del navegador.

Sistemas de Cache

/* Agregar antes que inicie el cacheo */
if (eregi('(iPhone|iPod)', $_SERVER['HTTP_USER_AGENT'])) return false;

inicio_cache();

WP Super Cache y WP Cache

Añadimos iPhone y iPod a la lista Rejected User Agents que esta en la administración de dichos plugins de wordpress.


Nota: La forma como verifica los users agents internamente wp super cache y wp cache es mediante la funcion apache_request_headers la cual está disponible únicamente cuando PHP se ejecuta como un módulo de Apache, si tu servidor ejecuta PHP como CGI las opciones de Rejected User Agents no estara disponible.

Como solucionarlo

Tanto para WP Super Cache o WP Cache, editamos el archivo wp-cache.php y pegamos esto antes de todo el código.

/* verificamos si no existe la funcion*/
if (!function_exists('apache_request_headers')) {
/* si no existe la creamos una similar. */
    eval('
        function apache_request_headers() {
            foreach($_SERVER as $key=>$value) {
                if (substr($key,0,5)=="HTTP_") {
                    $key=str_replace(" ","-",ucwords(strtolower(str_replace("_"," ",substr($key,5)))));
                    $out[$key]=$value;
                }
            }
            return $out;
        }
    ');
}

1 Blog Cacher

FUNCTION obc_cache_init(){
/* En el archivo advanced-cache.php en la linea 67 */
global $obc_configuration;

//Evitamos cacheo para iPhone/iPod
if (eregi('(iPhone|iPod)', $_SERVER['HTTP_USER_AGENT'])) return false;

$obc_create_cache = true;

De antemano agradecimiento a Andres por la ayuda que me brindo :)

Tags: , , , , , , , ,