Cómo crear cookies en Symfony y definir el HttpOnly a false

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

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.