Есть ли вспомогательные библиотеки для чтения файла 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 |
Как вы видете:
#
как первый символ. И тогда, у мясистых линий есть 7 жетонов, разделенных символом табуляции ( \t
). Они определены здесь :
Итак, теперь давайте сделаем наш парсер файлов 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()
для содержимого этого файла.