当前位置:  开发笔记 > 编程语言 > 正文

PHP读取cookie文件

如何解决《PHP读取cookie文件》经验,为你挑选了2个好方法。

是否有任何帮助库来读取PHP中的cookie文件.我的本地磁盘上有一个cookie文件,我想要一个更好的阅读方式.我目前只是按行阅读文件并解析出值.



1> Majid Foulad..:

如果你的目标是阅读Netscape的格式(例如curl以这种格式保存COOKIEJAR中的cookie),这非常简单.

首先是一个例子(管道和行号在这里添加,不会出现在实际文件中):

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).这些被定义在这里:

    domain - 创建AND的域,可以读取变量.

    flag - 一个TRUE/FALSE值,指示给定域中的所有计算机是否都可以访问该变量.此值由浏览器自动设置,具体取决于您为域设置的值.

    path - 变量有效的域内路径.

    secure - 一个TRUE/FALSE值,指示访问变量是否需要与域的安全连接.

    到期 - 变量将过期的UNIX时间.UNIX时间定义为自1970年1月1日00:00:00 GMT以来的秒数.

    name - 变量的名称.

    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('Y-m-d h:i:s', $tokens[4]);

    // we can do different things with the tokens, here we build a table row
    $trows .= '' . implode('', $tokens) . '' . 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 ''.PHP_EOL.''.PHP_EOL.$trows.''.PHP_EOL.'
';

最后,这是一个演示.



2> 小智..:

我找不到一个代码来满足现在非常流行的HttpOnly cookie记录 - 例如在http://www.google.com/中使用.HttpOnly cookie只能由浏览器读取,并且对所有客户端脚本(如java脚本)保持隐藏状态.您可以在此处找到有关HttpOnly cookies的更多详细信息.

忽略Netscape cookie文件中这些cookie的格式将导致解析不正确.这些记录以"#HttpOnly_"字符串为前缀.

我们还应该为几乎所有应用程序"urldecode"参数名称及其值.

下面的函数是的样本代码的组合和更新的版本马吉德Fouladpour和菲利普诺顿它参考的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('Y-m-d h:i:s', $tokens[4]);

            // Record the cookie.
            $cookies[] = $cookie;
        }
    }

    return $cookies;
}

这是该功能的演示.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有