2009-01-03 14 views
8

क्या php में कुकी फ़ाइल पढ़ने के लिए कोई सहायक libs हैं। मेरे पास मेरी स्थानीय डिस्क पर कुकी फ़ाइल है और मैं इसे पढ़ने का बेहतर तरीका चाहूंगा। मैं वर्तमान में लाइन के समान फाइलों को पढ़ने और मूल्यों को पार्स करने के लिए पढ़ रहा हूं।PHP एक कुकी फ़ाइल पढ़ रहा है

उत्तर

0

मुझे लगता है कि $ _COOKIE आपकी तलाश में है।

इस superglobal कुकी डेटा को पढ़ने के लिए इस्तेमाल किया जा सकता है ... यह स्थापित करने के लिए आप $_COOKIE superglobal

0

तहत पीएचपी वेबसाइट पर पाया जा सकता है setcookie() अधिक उपयोग करने की आवश्यकता मुझे यकीन है कि मैं तुम्हें सही ढंग से समझ के रूप में यह सामान्य रूप से है नहीं कर रहा हूँ सुंदर (setcookie का प्रयोग करके) स्थापित करने और अपने स्क्रिप्ट से PHP में एक कुकी को पढ़ने के लिए सरल: एक ब्राउज़र के माध्यम से जा के बिना,

$value = $_COOKIE['mycookie']; 

आप अपनी फाइल सिस्टम से सीधे एक कच्चे कुकी पढ़ने का एक तरीका के लिए देख रहे हैं, तो आप ' आपको यह निर्दिष्ट करने की आवश्यकता होगी कि वे किस प्रारूप/ब्राउज़र में लिखे गए थे। मूल्यों में हो सकता है कई अलग-अलग भाषाओं से क्रमबद्ध किया गया है और फ़ाइल का अंतिम परिणाम ब्राउज़र से ब्राउज़र में भिन्न हो सकता है।

// संपादित करें:

ब्राउज़र मतभेद पर अधिक: उदाहरण के लिए, मोज़िला एक format like that और IE कुछ more like that है।

-2

आप PHP में सत्र का उपयोग कर रहे हैं, और आप डिस्क पर सत्र डेटा पार्स करने का प्रयास वास्तव में हैं, तो आप उस फ़ाइल की सामग्री पर unserialize() फ़ंक्शन का उपयोग कर सकते हैं।

28

यदि आप नेटस्केप के प्रारूप को पढ़ने का लक्ष्य रखते हैं तो यह बहुत आसान है (उदाहरण के लिए कर्ल इस प्रारूप में कुकीज में कुकीज़ सहेजता है)।

पहले एक उदाहरण (पाइप और लाइन नंबर यहाँ जोड़ रहे हैं और वास्तविक फ़ाइल में नहीं होती है):

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) के साथ अलग है। ये here परिभाषित कर रहे हैं:

  1. डोमेन - डोमेन है कि बनाया है और उस चर पढ़ सकते हैं।
  2. ध्वज - एक सत्य/गलत मूल्य इंगित करता है कि किसी दिए गए डोमेन के भीतर सभी मशीन चर का उपयोग कर सकती हैं। डोमेन के लिए निर्धारित मान के आधार पर यह मान ब्राउज़र द्वारा स्वचालित रूप से सेट किया जाता है।
  3. पथ - डोमेन के भीतर पथ जो चर के लिए मान्य है।
  4. सुरक्षित - एक सत्य/गलत मान इंगित करता है कि चर के उपयोग के लिए डोमेन के साथ एक सुरक्षित कनेक्शन की आवश्यकता है या नहीं।
  5. समाप्ति - यूनिक्स समय जो वैरिएबल समाप्त हो जाएगा। यूनिक्स समय 1 जनवरी 1 9 70 00:00:00 जीएमटी के बाद से सेकंड की संख्या के रूप में परिभाषित किया गया है।
  6. नाम - चर का नाम।
  7. मूल्य - चर के मूल्य।

तो, अब चलिए अपनी कुकी-फ़ाइल पार्सर बनाते हैं।

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

अंत में, here एक डेमो है।

+1

ध्यान दें, $ टोकन [4] 'हो सकता है कि' '0', अगर समाप्त हो रहा है = सत्र। –

+0

मैं दिल से धन्यवाद देता हूं। –

+0

@OlegPopov आप स्वागत से अधिक हैं; यह सब कुछ है! –

8

मुझे Http केवल कुकी रिकॉर्ड जो अब काफी लोकप्रिय है - उदाहरण के लिए http://www.google.com/ में उपयोग किया जाने वाला कोड नहीं मिला। एक एचटीपी केवल कुकी ब्राउज़र द्वारा केवल पठनीय है और जावा स्क्रिप्ट जैसे सभी क्लाइंट साइड स्क्रिप्ट से छिपी रहेगी। आप HttpOnly कुकीज़ here के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

नेटस्केप कुकी फ़ाइलों में इन कुकीज़ के प्रारूप की अनदेखी करते हुए गलत पार्स का परिणाम देगा। ये रिकॉर्ड "#HttpOnly_" स्ट्रिंग के साथ उपसर्ग किए गए हैं।

हम चाहिए भी "urldecode" पैरामीटर नाम और लगभग सभी अनुप्रयोगों के लिए उनके मूल्यों।

निम्नलिखित समारोह Majid Fouladpour का नमूना कोड की एक संयुक्त और अद्यतन संस्करण और Philip Norton जो केवल Http कुकीज़ मानता है और एक सरणी में उनकी विशेषताओं के साथ सभी कुकी देता है:

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

और इस समारोह का एक demonstration है ।

+0

मैं दिल से आपको ठीक से धन्यवाद के लिए धन्यवाद देता हूं। –

0

प्रदर्शित करने के लिए त्वरित तरीका:

cat sess_qe3qq1164dnggru0m1j7fpbr23 | tr ';' '\n' 
0

इस पुस्तकालय आप में हेरफेर करने की अनुमति देता है (, जोड़ें, हटाएं अद्यतन, ...) नेटस्केप कुकी फ़ाइल (जैसे कर्ल द्वारा उत्पन्न कुकीज़।):

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

पी एस यह परियोजना बहुत अच्छी है, लेकिन मुझे नहीं पता कि इस पल में क्यों, इसके सितारे बहुत कम हैं! ;-)

संबंधित मुद्दे