PHP читает файл cookie - PullRequest
       34

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

10 голосов
/ 04 января 2009

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

Ответы [ 7 ]

29 голосов
/ 17 мая 2011

Это довольно просто, если вы хотите прочитать формат Netscape (например, curl сохраняет куки в 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. домен - домен, который создал И, который может читать переменную.
  2. флаг - значение ИСТИНА / ЛОЖЬ, указывающее, могут ли все машины в данном домене иметь доступ к переменной. Это значение устанавливается браузером автоматически в зависимости от значения, установленного для домена.
  3. путь - путь в домене, для которого допустима переменная.
  4. secure - значение TRUE / FALSE, указывающее, требуется ли для доступа к переменной безопасное соединение с доменом.
  5. expiration - время UNIX, на которое истекает переменная. Время UNIX определяется как количество секунд с 1 января 1970 года 00:00:00 по Гринвичу.
  6. name - Имя переменной.
  7. значение - значение переменной.

Итак, теперь давайте сделаем наш анализатор 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('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>';

Наконец, здесь - это демо.

9 голосов
/ 23 октября 2014

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

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

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

Следующая функция представляет собой комбинированную и обновленную версию примеров кодов Маджид Фуладпур и Филип Нортон , который рассматривает куки HttpOnly и возвращает все куки с их атрибутами в массиве:

/**
 * 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;
}

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

0 голосов
/ 30 ноября 2017

Эта библиотека позволяет вам манипулировать (добавлять, удалять, обновлять, ...) файлом cookie Netscape (например, файлами cookie, генерируемыми CURL):

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

Простой пример чтения + записи куки:

/*Open and parse the cookie file*/

$configuration = (new Configuration())->setCookieDir('cookies/');
$cookieJar = (new CookieFileHandler($configuration))->parseFile('my_cookie_file');

/*Add (and save) a cookie*/

$cookieJar->add(
    (new Cookie())
        ->setHttpOnly(true)
        ->setPath('/foo')
        ->setSecure(true)
        ->setExpire(new DateTime('2020-02-20 20:20:02'))
        ->setName('foo')
        ->setValue('bar')
)->persist();

P.S. Этот проект великолепен, но я не знаю, почему в этот момент его звезды так низки! ; -)

0 голосов
/ 03 мая 2017

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

 cat sess_qe3qq1164dnggru0m1j7fpbr23 | tr ';' '\n'
0 голосов
/ 05 января 2009

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

0 голосов
/ 04 января 2009

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

$value = $_COOKIE['mycookie'];

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

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

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

0 голосов
/ 04 января 2009

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

Этот суперглобальный код можно использовать для чтения данных cookie ... для его установки необходимо использовать setcookie() Более подробную информацию можно найти на веб-сайте PHP по адресу $ _ COOKIE superglobal

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...