PHP чтение файла cookie

Есть ли вспомогательные библиотеки для чтения файла cookie в php. У меня есть файл cookie на моем локальном диске, и мне бы хотелось, чтобы он лучше читал его. В настоящее время я просто читаю файл как по строке и разбор значений.

Это довольно просто, если вы хотите прочитать формат Netscape (например, curl сохраняет файлы cookie в COOKIEJAR в этом формате).

Сначала пример (номера труб и строк добавляются сюда и не встречаются в реальном файле):

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 | 

Как вы видете:

  1. У нас могут быть строки комментариев, обозначенные символом # как первый символ.
  2. У нас могут быть пустые строки

И тогда, у мясистых линий есть 7 жетонов, разделенных символом табуляции ( \t ). Они определены здесь :

  1. domain – домен, который создал AND, который может читать переменную.
  2. flag – Значение TRUE / FALSE, указывающее, могут ли все машины в пределах данного домена получить доступ к переменной. Это значение автоматически устанавливается браузером в зависимости от значения, установленного для домена.
  3. path – путь в домене, для которого действительна переменная.
  4. secure – значение TRUE / FALSE, указывающее, требуется ли безопасное соединение с доменом для доступа к переменной.
  5. expiration – время UNIX, в течение которого переменная истечет. Время UNIX определяется как количество секунд с 1 января 1970 года 00:00:00 GMT.
  6. name – имя переменной.
  7. value – значение переменной.

Итак, теперь давайте сделаем наш парсер файлов cookie.

 // 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('Ymd 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>'; 

Наконец, вот демо.

Я не мог найти код для обработки HttpOnly файлов cookie, которые сейчас довольно популярны – например, на http://www.google.com/ . Печенье HttpOnly ТОЛЬКО читается браузером и останется скрытым от всех клиентских скриптов, таких как java-скрипты. Вы можете найти более подробную информацию о HttpOnly cookie здесь .

Игнорирование формата этих файлов cookie в файлах cookie Netscape приведет к неправильному синтаксическому анализу. Эти записи имеют префикс строки «#HttpOnly_».

Мы также должны указывать имена параметров «urldecode» и их значения практически для всех приложений.

Следующая функция представляет собой комбинированную и обновленную версию примеров кода Majid Fouladpour и Philip Norton, которая рассматривает файлы cookie HttpOnly и возвращает все файлы cookie с их атрибутами в массиве:

 /** * 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('Ymd h:i:s', $tokens[4]); // Record the cookie. $cookies[] = $cookie; } } return $cookies; } 

И это демонстрация функции.

Я думаю, что $ _COOKIE – это то, что вы ищете.

Этот суперглобал можно использовать для чтения данных cookie … чтобы установить его, вам нужно использовать setcookie() Больше можно найти на веб-сайте PHP под $ _COOKIE superglobal

Я не уверен, что вы правильно поняли, так как обычно довольно просто установить (используя setcookie ) и прочитать cookie в PHP из ваших скриптов:

 $value = $_COOKIE['mycookie']; 

Если вы ищете способ чтения сырого файла cookie непосредственно из вашей файловой системы, не просматривая браузер, вам нужно указать, в каком формате / браузере они были написаны. Значения могли быть сериализованы с разных языков и конечный результат файла может отличаться от браузера к браузеру.

// Редактировать:

Подробнее о различиях в браузере: например, Mozilla имеет такой формат, а IE – нечто большее .

Быстрый способ отображения:

  cat sess_qe3qq1164dnggru0m1j7fpbr23 | tr ';' '\n' 

Эта библиотека позволяет вам манипулировать (добавлять, удалять, обновлять, …) Netscape Cookie File (например, Cookies, созданные CURL):

https://github.com/kegi/netscape-cookie-file-handler

PS Этот проект замечательный, но я не знаю, почему в этот момент его звезды настолько низки! 😉

Если вы используете сеансы в PHP, и на самом деле вы пытаетесь разобрать данные сеанса на диске, вы можете использовать функцию unserialize() для содержимого этого файла.