¿Hay alguna biblioteca de ayuda para leer un archivo de cookie en php? Tengo un archivo de cookies en mi disco local y me gustaría una mejor manera de leerlo. Actualmente solo estoy leyendo archivos por línea y analizando los valores.PHP leyendo un archivo de cookie
Respuesta
Creo que $ _COOKIE es lo que estás buscando.
Este superglobal se puede utilizar para leer datos de galletas ... para establecer que es necesario utilizar setcookie()
más se pueden encontrar en el sitio web PHP bajo $_COOKIE superglobal
No estoy seguro le he entendido bien, ya que es normalmente bastante sencillo de configurar (utilizando setcookie
) y leer una cookie en PHP a partir de las secuencias de comandos:
$value = $_COOKIE['mycookie'];
Si usted está buscando una manera de leer una cookie en bruto directamente desde su sistema de archivos, sin tener que pasar a través de un navegador, se' Necesitaré especificar en qué formato/navegador se escribieron. Los valores podrían tener ha sido serializado desde muchos idiomas diferentes y el resultado final del archivo puede diferir de un navegador a otro.
// Edición:
Más sobre las diferencias navegador: por ejemplo, Mozilla tiene una format like that e IE algo more like that.
Si está utilizando sesiones en PHP, y de hecho está tratando de analizar los datos de la sesión en el disco, puede usar la función unserialize()
en el contenido de ese archivo.
Esto es bastante simple si su objetivo es leer el formato de Netscape (por ejemplo, curl guarda las cookies en COOKIEJAR en este formato).
Primero un ejemplo (se añaden las tuberías y los números de línea aquí y no se producen en el archivo real):
01 | # Netscape HTTP Cookie File
02 | # http://curl.haxx.se/rfc/cookie_spec.html
03 | # This file was generated by libcurl! Edit at your own risk.
04 |
05 | .google.com TRUE / FALSE 1305843382 cookiename the value
06 | .yahoo.com TRUE / FALSE 1305843382 another_cookie it's value
07 |
Como se puede ver:
- Podríamos haber líneas de comentarios identificada con
#
como el primer personaje. - podríamos tener líneas en blanco
Y luego, las líneas carnosos tienen cada 7 bloques separados por un carácter de tabulación (\t
). Estos se definen here:
- dominio - El dominio que crearon y que puede leer la variable.
- marca - Un valor VERDADERO/FALSO que indica si todas las máquinas dentro de un dominio determinado pueden acceder a la variable. Este valor lo establece automáticamente el navegador, según el valor que establezca para el dominio.
- ruta de acceso: la ruta dentro del dominio para el que es válida la variable.
- seguro: valor TRUE/FALSE que indica si se necesita una conexión segura con el dominio para acceder a la variable.
- expiración - La hora de UNIX en que caducará la variable. La hora de UNIX se define como la cantidad de segundos desde el 1 de enero de 1970 00:00:00 GMT.
- name - El nombre de la variable.
- valor - El valor de la variable.
Entonces, ahora hagamos nuestro analizador de cookies.
// read the file
$lines = file('path/to/cookies.txt');
// var to hold output
$trows = '';
// iterate over lines
foreach($lines as $line) {
// we only care for valid cookie def lines
if($line[0] != '#' && substr_count($line, "\t") == 6) {
// get tokens in an array
$tokens = explode("\t", $line);
// trim the tokens
$tokens = array_map('trim', $tokens);
// let's convert the expiration to something readable
$tokens[4] = date('Y-m-d h:i:s', $tokens[4]);
// we can do different things with the tokens, here we build a table row
$trows .= '<tr></td>' . implode('</td><td>', $tokens) . '</td></tr>' . PHP_EOL;
// another option, make arrays to do things with later,
// we'd have to define the arrays beforehand to use this
// $domains[] = $tokens[0];
// flags[] = $tokens[1];
// and so on, and so forth
}
}
// complete table and send output
// not very useful as it is almost like the original data, but then ...
echo '<table>'.PHP_EOL.'<tbody>'.PHP_EOL.$trows.'</tbody>'.PHP_EOL.'</table>';
Finalmente, here es una demostración.
no pude encontrar un código para atender a HTTPOnly registros de galletas, que es bastante popular ahora - por ejemplo utilizados en http://www.google.com/. Solo el navegador puede leer una cookie de HttpOnly y permanecerá oculta en todos los scripts del lado del cliente, como los scripts de Java. Puede encontrar más detalles sobre las cookies de HttpOnly here.
Ignorar el formato de estas cookies en los archivos de cookies de Netscape dará como resultado un análisis incorrecto. Estos registros están precedidos por una cadena "#HttpOnly_".
También deberíamos "urldecode" nombres de parámetros y sus valores para casi todas las aplicaciones.
La siguiente función es una versión combinada y actualizada de códigos de muestra de Majid Fouladpour y Philip Norton que considera las cookies HTTPOnly y devuelve todas las cookies con sus atributos en una matriz:
/**
* Extract any cookies found from the cookie file. This function expects to get
* a string containing the contents of the cookie file which it will then
* attempt to extract and return any cookies found within.
*
* @param string $string The contents of the cookie file.
*
* @return array The array of cookies as extracted from the string.
*
*/
function extractCookies($string) {
$lines = explode(PHP_EOL, $string);
foreach ($lines as $line) {
$cookie = array();
// detect httponly cookies and remove #HttpOnly prefix
if (substr($line, 0, 10) == '#HttpOnly_') {
$line = substr($line, 10);
$cookie['httponly'] = true;
} else {
$cookie['httponly'] = false;
}
// we only care for valid cookie def lines
if(strlen($line) > 0 && $line[0] != '#' && substr_count($line, "\t") == 6) {
// get tokens in an array
$tokens = explode("\t", $line);
// trim the tokens
$tokens = array_map('trim', $tokens);
// Extract the data
$cookie['domain'] = $tokens[0]; // The domain that created AND can read the variable.
$cookie['flag'] = $tokens[1]; // A TRUE/FALSE value indicating if all machines within a given domain can access the variable.
$cookie['path'] = $tokens[2]; // The path within the domain that the variable is valid for.
$cookie['secure'] = $tokens[3]; // A TRUE/FALSE value indicating if a secure connection with the domain is needed to access the variable.
$cookie['expiration-epoch'] = $tokens[4]; // The UNIX time that the variable will expire on.
$cookie['name'] = urldecode($tokens[5]); // The name of the variable.
$cookie['value'] = urldecode($tokens[6]); // The value of the variable.
// Convert date to a readable format
$cookie['expiration'] = date('Y-m-d h:i:s', $tokens[4]);
// Record the cookie.
$cookies[] = $cookie;
}
}
return $cookies;
}
Y esto es un demonstration de la función .
Gracias sinceramente por la solución HttpOnly. –
Forma rápida de pantalla:
cat sess_qe3qq1164dnggru0m1j7fpbr23 | tr ';' '\n'
Esta biblioteca le permite manipular (añadir, eliminar, actualizar, ...) del archivo de cookies de Netscape (por ejemplo, cookies generadas por CURL.):
https://github.com/kegi/netscape-cookie-file-handler
PS Este proyecto es genial, pero no sé por qué en este momento, ¡sus estrellas son tan bajas! ;-)
- 1. PHP leyendo un archivo csv efectivamente
- 2. Leyendo un archivo .pdb
- 3. Leyendo línea específica de un archivo en PHP
- 4. Leyendo un archivo en una matriz de bytes (PHP)
- 5. leyendo un archivo en python
- 6. JQuery.getJSON() leyendo un archivo local
- 7. Qt - leyendo de un archivo de texto
- 8. Leyendo un archivo de texto en java
- 9. Leyendo un archivo * .dmp de Windows
- 10. Leyendo JSON desde un archivo de texto
- 11. Leyendo un archivo de texto simple
- 12. Leyendo un archivo zip dentro de un archivo jar
- 13. Leyendo un archivo usando el escáner Java
- 14. Leyendo un archivo generado por Cobol
- 15. StreamReader y leyendo un archivo XML
- 16. leyendo un archivo .bmp en C++
- 17. C++, leyendo un archivo usando ifstream
- 18. Secuencia PHP o cookie
- 19. jQuery $ .cookie no está leyendo la cookie establecida por la respuesta del servidor
- 20. cookie php no funciona
- 21. Android: Leyendo del archivo (Openfileinput)
- 22. leyendo un archivo XML en un programa C++
- 23. PHP - Enviar cookie con file_get_contents
- 24. leyendo un archivo específico de sdcard en android
- 25. leyendo y trazando un archivo de forma esri en R
- 26. Leyendo un archivo desde la carpeta de recursos
- 27. Leyendo un archivo de texto con SQL Server
- 28. leyendo un archivo de texto en R línea por línea
- 29. Leyendo un archivo de texto en MATLAB línea por línea
- 30. Leyendo datos de un Archivo mientras está siendo escrito en
Tenga en cuenta que '$ tokens [4]' podría ser '0', si expira = sesión. –
Sinceramente, gracias. –
@OlegPopov eres más que bienvenido; ¡esto es todo lo que SO se trata! –