• Publicidad

Parsear Cookies en PHP

Todo lo relacionado con lenguajes de programación distintos de Perl: PHP, Java, C++, Ruby, Python, etc.

Parsear Cookies en PHP

Notapor BigBear » 2014-10-09 19:49 @867

Hola. Estoy tratando de analizar cookies con PHP, encontré esta función pero PHP me dice que no existe: http://php.net/manual/es/function.http-parse-cookie.php Intenté improvisar a mi manera y casi lo tengo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. <?php
  2.  
  3. $line = "foo=bar; path=/; domain=example.com; comment=;";
  4.  
  5. $tokens = explode(" ", $line);
  6. $tokens = array_map('trim', $tokens);
  7.  
  8. echo print_r($tokens);
  9.  
  10.  
  11. ?>
Coloreado en 0.021 segundos, usando GeSHi 1.0.8.4

El tema es que captura todos los campos pero el problema es que no conozco la estructura de cómo se ven los campos vi muchas cookies de otras páginas y a veces varían las posiciones, o sea al principio pensaba que el primero siempre era el nombre y el contenido pero después resulto que el primero era el dominio y el ruta. ¿ Alguien me podría explicar la estructura definitiva ?
Última edición por explorer el 2014-10-09 20:21 @889, editado 1 vez en total
Razón: parsear => analizar; encontre => encontré; funcion => función; intente => Intenté; como => cómo; paginas => páginas; varian => varían; despues => después; path => ruta; podria => podría;
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Parsear Cookies en PHP

Notapor explorer » 2014-10-09 20:32 @897

La función http_parse_cookie() está dentro de la biblioteca pecl_http, que hay que instalar aparte.

En el propio enlace que has publicado viene un ejemplo (en el último comentario) de una función alternativa detallada en PHP.

La estructura de la cookie está, naturalmente, en un RFC (el 6265), pero como no lo vas a leer, quizás te sirva el resumen que aparece en la Wikipedia (en inglés; en la versión en español hay poco detalle).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Parsear Cookies en PHP

Notapor BigBear » 2014-10-09 20:42 @904

Ok, mira cómo quedó el código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. < ?php
  2.  
  3. function cookie_parse( $line ) {
  4.         $cookies = array();
  5.         $csplit = explode( ';', $line );
  6.         $cdata = array();
  7.         foreach( $csplit as $data ) {
  8.                 $cinfo = explode( '=', $data );
  9.                 $cinfo[0] = trim( $cinfo[0] );
  10.                 if( $cinfo[0] == 'expires' ) $cinfo[1] = strtotime( $cinfo[1] );
  11.                 if( $cinfo[0] == 'secure' ) $cinfo[1] = "true";
  12.                 if( in_array( $cinfo[0], array( 'domain', 'expires', 'path', 'secure', 'comment' ) ) ) {
  13.                         $cdata[trim( $cinfo[0] )] = $cinfo[1];
  14.                 }
  15.                 else {
  16.                         $cdata['value']['key'] = $cinfo[0];
  17.                         $cdata['value']['value'] = $cinfo[1];
  18.                 }
  19.         }
  20.         $cookies[] = $cdata;
  21.  
  22.         return $cookies;
  23. }
  24.  
  25.  
  26. $line = "foo=bar; path=/; domain=example.com; comment=;";
  27.  
  28. echo print_r(cookie_parse($line));
  29.  
  30. ? >
  31.  
Coloreado en 0.010 segundos, usando GeSHi 1.0.8.4

Devuelve:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Array ( [0] => Array ( [value] => Array ( [key] => [value] => ) [path] => / [domain] => example.com [comment] => ) ) 1
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

¿ Por qué no me detecta el nombre y el valor ? ¿ Cómo lo arreglo ?
Última edición por explorer el 2014-10-09 22:43 @988, editado 3 veces en total
Razón: como => cómo; quedo => quedó; codigo => código; Porque => Por qué; Como => Cómo;
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Parsear Cookies en PHP

Notapor explorer » 2014-10-09 23:18 @013

A la presencia del último ';' en la variable $line.

Una cosa... print_r() no necesita de ningún echo().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Parsear Cookies en PHP

Notapor BigBear » 2014-10-10 16:23 @724

Ya entendí, explorer, gracias por la ayuda. Mira: dejo el código que hice para resolver este problema:

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. <?php
  2.  
  3. function parsear_cookie($leyendo) {
  4.  
  5. // Coded By Doddy
  6. // Thanks to explorer
  7.  
  8. $leyendo =  str_replace("comment=","",$leyendo);
  9. $contenido = explode(";", $leyendo);
  10.  
  11. $nombre = "null";
  12. $valor_cookie = "null";
  13. $expires = "null";
  14. $path = "null";
  15. $domain = "null";
  16. $secure = "null";
  17. $httponly = "null";
  18.  
  19. foreach( $contenido as $valor ) {
  20.  
  21. if(preg_match("/expires=(.*)/",$valor,$regex)) {
  22. $expires = $regex[1];
  23. }
  24.  
  25. elseif(preg_match("/path=(.*)/",$valor,$regex)) {
  26. $path = $regex[1];
  27. }
  28.  
  29. elseif(preg_match("/domain=(.*)/",$valor,$regex)) {
  30. $domain = $regex[1];
  31. }
  32.  
  33. elseif(preg_match("/secure=(.*)/",$valor,$regex)) {
  34. $secure = $regex[1];
  35. }
  36.  
  37. elseif(preg_match("/httponly=(.*)/",$valor,$regex)) {
  38. $httponly = $regex[1];
  39. }
  40.  
  41. else {
  42.  
  43. if(preg_match("/(.*)=(.*)/",$valor,$regex)) {
  44. $nombre = $regex[1];
  45. $valor_cookie = $regex[2];
  46. }
  47.  
  48. }
  49.  
  50. }
  51.  
  52. return array($nombre,$valor_cookie,$expires,$path,$domain,$secure,$httponly);
  53.  
  54. }
  55.  
  56. $cookie = "foo=bar; path=/; domain=example.com; comment=;";
  57.  
  58. list($nombre,$valor_cookie,$expires,$path,$domain,$secure,$httponly) = parsear_cookie($cookie);
  59.  
  60. echo "name : $nombre"."<br>";
  61. echo "valor : $valor_cookie"."<br>";
  62. echo "expires : $expires"."<br>";
  63. echo "path : $path"."<br>";
  64. echo "domain : $domain"."<br>";
  65. echo "secure : $secure"."<br>";
  66. echo "httponly : $httponly"."<br>";
  67.  
  68.  
  69. ?>
Coloreado en 0.011 segundos, usando GeSHi 1.0.8.4


Una pregunta: cuando creo una cookie así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. if(setcookie("test","valor",time()+3600,"/","localhost",false,false)) {
  2. echo "yeah";
  3. }
Coloreado en 0.009 segundos, usando GeSHi 1.0.8.4


Uso el $_COOKIE['test'] pero nunca la encuentra. Me dice index no válido, la veo creada con un addon de Firefox pero mi PHP no la encuentra. ¿ Cuál es el error ? ¿ La ruta ?
Última edición por explorer el 2014-10-10 18:21 @806, editado 2 veces en total
Razón: entendi => entendí; codigo => código; valido => válido; cual => cuál; asi => así
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Programación en general

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados