用于获取PHPSESSID值的正则表达式Cookie

用于获取PHPSESSID值的正则表达式Cookie,php,regex,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

我有一个包含以下数据的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)的结果

我试过这个:

$search_expression = '/PHPSESSID\s+(.*)$/';
preg_match($search_expression, $cookie, $search_result);
然后我使用var_dump($search_result)


不确定我做错了什么…

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

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

您可能只是错误地使用了preg_match。要使用搜索结果填充变量,它将如下所示:

$search_expression = '/PHPSESSID\s+(.*)$/';
preg_match($search_expression, $cookie, $search_result);
然后,要引用特定的会话ID,您需要引用
$search\u result[1]
,它将恰好匹配括号中的内容(会话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/';

为什么要直接访问cookie文件?为什么不直接读取
$\u cookie
值或使用PHP内置函数检索会话ID?我正在保存cookie值并在后台进程中访问它们,该进程将使用PHPSESSID从受保护的站点下载文件,或者只使用\s+而不是\t
^
匹配这一行的开头。我想你的意思是
$
。它是一个\t字符,在PHPSESSID之后是一个\n。这些都不起作用$value=preg\u匹配(“/PHPSESSID\t(.*)$/”,$cookie);cookie值是一个大字符串。是的,我不知道为什么它不工作。我用新的信息更新了我上面的问题。正如我所说的,
$search\u result
是一个数组,因此要仅访问PHP会话ID(括号中搜索表达式的一部分),需要将其引用为
$search\u result[1]
,它将返回括号中某个项目的第一次点击。如果数组没有返回任何内容(空),那么搜索表达式不正确并且不工作(没有找到PHP会话ID)。我解决了这个问题,首先分解\n,然后循环每一行检查strstr PHPSESSID,如果这是真的,我用这个表达式得到值:/PHPSESSID\t+(.*)$/好的,太好了!很高兴问题解决了。我建议将此解决方案作为答案发布,以便其他人可以从中受益。我一定会投票赞成的。然后您也可以将其标记为已接受答案,并将其标记为已解决。
$search_expression = '/PHPSESSID\s+(.*)\s+\.some/';
$search_expression = '/PHPSESSID\s+([a-z0-9]+)\s+\.some/';