Recientemente, en uno de mis proyectos, he intentado obtener las cookies del DOM utilizando el siguiente código:
var cookies = document.cookie.split('; ');
Me di cuenta de que cada vez, el valor de "document.cookie" era una cadena en blanco, y me estaba quebrando la cabeza tratando de averiguar cómo tal cosa podrÃa suceder.
Luego me topé con que hay un parámetro llamado HttpOnly que se puede definir y que era la causa del problema.
Uso de HttpOnly
¿Cuál es el propósito de HttpOnly? De acuerdo con este post de Coding Horror, se introdujo en el navegador IE6 SP1 como parte de un plan para reducir XSS. En realidad, es realmente una buena idea, ya que con el indicador HttpOnly establecido en true, cualquier código JavaScript no podrá acceder a la cookie.
Symfony por defecto
Desafortunadamente, la cookie de Symfony está puesta a true por defecto. En mi aplicación, estaba creando una cookie tal que asÃ:
$cookie = new Cookie( 'my_cookie', // Name $obj->getId(), // Value time() + ( 2 * 365 * 24 * 60 * 60) // Expires 2 years );
Si echas un vistazo a la documentación de Symfony Cookie, verás que el valor por defecto de $httpOnly es true;, por lo que dado el código anterior, el indicador HttpOnly se establecerá en true.
Crear cookie con HttpOnly definido a false
Si necesitas definir HttpOnly a false, necesitas un código parecido a este:
$cookie = new Cookie( 'my_cookie', $obj->getId(), time() + ( 2 * 365 * 24 * 60 * 60), '/', // Path. null, // Domain. false, // Xmit secure https. false // HttpOnly Flag. );
Algunos de los valores de lo que acabo de describir son valores de sentido común. También puedes ver como se define el HttpOnly a false. Una vez hecho esto, ahora puedes hacer cosas como eliminar la cookie o cambiarla según sea necesario.
Fuente: Alvin Bunk