正则表达式Cookie获取PHPSESSID值

时间:2011-08-10 22:06:18

标签: php regex

我有一个包含以下数据的cookie:

.somesite.com   TRUE    /   FALSE   1315605660  lang    en
.somesite.com   TRUE    /   FALSE   1314223260  role    premium
.somesite.com   TRUE    /   FALSE   1314223260  PHPSESSID   7ah4ppb3bcbubged8pejb05s35
.somesite.com   TRUE    /   FALSE   1314223260  rememberMe  1
.somesite.com   TRUE    /   FALSE   1314223260  email   me@email.me
.somesite.com   TRUE    /   FALSE   1281477659  nickname    deleted
.somesite.com   TRUE    /   FALSE   1281477659  isAffiliate deleted
.somesite.com   TRUE    /   FALSE   0   messagingUnread 0
.somesite.com   TRUE    /   FALSE   0   messagingUnreadLastcheck    1313013660

我只想获得PHPSESSID的值,在这种情况下是:7ah4ppb3bcbubged8pejb05s35

如何使用preg_match获取该值?

更新

所以这是var_dump($ cookie);

的结果
string '# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

.somesite.com   TRUE    /   FALSE   1315612275  lang    en
.somesite.com   TRUE    /   FALSE   1314229875  role    premium
.somesite.com   TRUE    /   FALSE   1314229875  PHPSESSID   j8v4ifqfpvbfr1cjp49e8del55
.somesite.com   TRUE    /   FALSE   1314229875  rememberMe  1
.somesite.com   TRUE    /   FALSE   1314229875  email   me%40email.me
.somesite.com   TRUE    /   FALSE   1281484274  nickname    deleted
.somesite.com   TRUE    /   FALSE   1281484274  isAffiliate deleted
.somesite.com   TRUE    /   FALSE   0   messagingUnread 0
.somesite.com   TRUE    /   FALSE   0   messagingUnreadLastcheck    1313020275
' (length=647)

我试过了:

$search_expression = '/PHPSESSID\s+(.*)$/';
preg_match($search_expression, $cookie, $search_result);

然后我var_dump($ search_result);

array
  empty

不确定我做错了什么......

2 个答案:

答案 0 :(得分:2)

您可能只是错误地使用了preg_match。要使用搜索结果填充变量,它看起来像这样:

$search_expression = '/PHPSESSID\s+(.*)$/';
preg_match($search_expression, $cookie, $search_result);

然后引用您将引用$search_result[1]的特定会话ID,它将与括号中的内容(会话ID)匹配。所以要使用这个例子,试试这个:

$search_expression = '/PHPSESSID\s+(.*)$/';
if (preg_match($search_expression, $cookie, $search_result)) {
  echo "PHP Session ID found.";
  $phpsessionid = $search_result[1];
} else {
  echo "PHP Session ID not found.";
}

这将有助于缩小问题范围。如果还没有返回,那么问题在于搜索表达式。如果是这种情况,您可以选择尝试:

$search_expression = '/PHPSESSID\s+(.*)\s+\.some/';

如果仍然无效,请尝试以下搜索表达式:

$search_expression = '/PHPSESSID\s+([a-z0-9]+)\s+\.some/';

答案 1 :(得分:1)

如果分隔符是多行字符串中的制表符,空格或两者:

~[ \t]PHPSESSID[ \t]+(.*)$~m