用于获取PHPSESSID值的正则表达式Cookie
我有一个包含以下数据的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
.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/';