PHP bir çerez dosyası okuma

4 Cevap php

Php bir çerez dosyası okumak için herhangi bir yardımcı kütüphaneleri vardır. Benim yerel diskte bir çerez dosyası var ve bunu okuma daha iyi bir yol istiyoruz. Şu anda sadece çizgiyle gibi dosya okuma ve değerlerini ayrıştırma duyuyorum.

4 Cevap

Eğer Netscape'in biçimi (örneğin kıvırmak bu formatta cookiejar çerezleri kaydeder) okumak amacı, bu oldukça basittir.

Önce bir örnek (borular ve satır numaraları burada ilave edilir ve gerçek dosyasında meydana gelmez):

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 |

Gördüğünüz gibi:

  1. Biz ilk karakter olarak # ile gösterilir satırlarını olabilir.
  2. Biz boş çizgiler olabilir

And then, the beefy lines each have 7 tokens seprated with a tab character (\t). These are defined here:

  1. domain - oluşturuldu VE bu değişken okuyabilirsiniz etki.
  2. bayrak - belirli bir etki alanındaki tüm makineleri değişken erişebilirsiniz olmadığını gösteren bir DOĞRU / YANLIŞ değeri. Bu değer, etki alanı için belirlenen değerine bağlı olarak, tarayıcı tarafından otomatik olarak ayarlanır.
  3. yol - değişken için geçerli etki alanı içinde yolu.
  4. güvenli - etki alanı ile güvenli bir bağlantı değişken erişmek için gerekli olmadığını gösteren bir DOĞRU / YANLIŞ değerini.
  5. erme - değişken tarihinde sona erecek UNIX zaman. UNIX zaman 1 Ocak 1970 00:00:00 GMT beri saniye sayısı olarak tanımlanır.
  6. değişkenin adı - isim.
  7. değer - değişkenin değeri.

Yani, şimdi bizim çerez dosyası ayrıştırıcı yapalım.

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

Son olarak, here bir demo.

Ben $ _COOKIE sizin aradığınız şey olduğunu düşünüyorum.

Bu superglobal size setcookie() Daha $_COOKIE superglobal altında PHP web sitesinde bulunabilir kullanmak gerekir ayarlamak için ... çerez veri okumak için kullanılabilir

Ben ({[(0)}] kullanarak) ayarlamak ve komut PHP bir çerez okumak normalde oldukça basit olduğu gibi sizi doğru anladığımdan emin değilim:

$value = $_COOKIE['mycookie'];

Eğer bir tarayıcı aracılığıyla gitmeden, dosya sistemlerini doğrudan ham çerez okuma bir yol arıyorsanız, onlar değerleri farklı dillerde bir sürü tefrika olabilirdi yazıldığı ne biçim / tarayıcı belirtmeniz gerekir ve dosya nihai sonucu tarayıcıdan tarayıcıya farklı olabilir.

// Edit:

Tarayıcı farklar hakkında daha fazla: örneğin, Mozilla format like that ve IE şey vardır more like that.

Eğer PHP oturumları kullanıyorsanız ve diskteki oturum verilerini ayrıştırmak çalışıyorum aslında iseniz, o dosyanın içeriğine unserialize() işlevini kullanabilirsiniz.