2011-09-13 7 views
5

Actualmente estoy teniendo algunos problemas al intentar leer cookies usando PHP o Javascript. He intentado usar:No puedo leer las cookies a través de PHP o Javascript cuando estoy en un iPad

if(!$_COOKIE['popup_closed'] 
&& !isset($_COOKIE['username']) 
&& !isset($_COOKIE['password']) 
) 

Y he intentado:

if(
$.cookie('popup_closed') == null 
&& $.cookie('username') == null 
&& $.cookie('password') == null) { 
doStuff(); 
} 

(Usando el plugin jquery.cookie)

Y ninguno de ellos trabajan en el iPad. Funciona bien en todos los navegadores. He intentado buscar en Google el problema, pero no parece haber mucha información sobre la lectura de cookies en un iPad.

Gracias por cualquier ayuda que ustedes pueden dar!

+0

¿Su código funciona bien en Safary (en Mac o PC)? Debería funcionar de manera idéntica en iPad. – haynar

+0

Lo hace de hecho. Y las cookies también están activadas en el iPad. –

+0

desafortunadamente no tengo idea de por qué no funciona, pero hace algún tiempo tuve un problema relacionado con las cookies en todas las versiones de Safari (Mac, PC, iPad, etc.). Era la restricción incorporada de Safari (Safari no acepta cookies de sitios de terceros a menos que el usuario interactuara explícitamente con la página web). ¿Tal vez estás tratando de usar cookies de iframe? – haynar

Respuesta

7

Esto es realmente una solución, pero se puede usar el almacenamiento local si está disponible - al menos lo he utilizado en el iPad/iPhone con éxito.

Por ejemplo, con este tipo de solución.

function saveData(name, value) { 
    if (typeof(localStorage) != 'undefined') { 
     localStorage.setItem(name, value); 
    } else { 
     createCookie(name, value, 7); 
    } 
} 

function loadData(name) { 
    var temp_value = ''; 

    if (typeof(localStorage) != 'undefined') { 
     temp_value = localStorage.getItem(name); 
    } else { 
     temp_value = readCookie(name); 
    } 

    return temp_value; 
} 

function eraseData(name) { 
    if (typeof(localStorage) != 'undefined') { 
     localStorage.removeItem(name); 
    } else { 
     eraseCookie(name); 
    } 

} 

function createCookie(name,value,days) { 
    var expires = ""; 

    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
     expires = "; expires=" + date.toGMTString(); 
    } 
    else { 
     expires = ""; 
    } 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') { 
      c = c.substring(1,c.length); 
     } 
     if (c.indexOf(nameEQ) === 0) { 
      return c.substring(nameEQ.length, c.length); 
     } 
    } 
    return null; 
} 

function eraseCookie(name) { 
    createCookie(name,"",-1); 
} 
+1

En realidad esta es una solución muy ingeniosa, +1 – Aidiakapi

+0

Hola Marcus, ¡gracias por esto! Veré si funciona el próximo martes ya que ese es el día en que trabajo en el sitio en cuestión. Voy a aceptar tu respuesta el martes si funciona :) Gracias de nuevo. –

+0

Hola, no hay problema, ¡es bueno saber que la solución fue útil para ti! – Marcus

0

le pida que tome un vistazo a la manual respecto setcookie? Deberías usar todas las variables, ¿quizás esto resuelve el hecho de que no puedes acceder a tus cookies con JS? Además, el uso de JS nativo para acceder a las cookies (en lugar de jQuery), ¿no funciona?

Cuestiones relacionadas