Я только хочу улучшить ответ @ evildead.Его ответ не работает, если выходная строка заголовка содержит разрывы строк или когда заголовок cookie заканчивается сразу после sessid (поэтому нет точки с запятой).
$foo="HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Wed, 26 Sep 2011 19:10:48 GMT\r\nServer: Apache/2.2.16 (Win32) mod_ssl/2.2.16 OpenSSL/0.9.8o X-Powered-By: PHP/5.3.5 Set-Cookie: PHPSESSID=lsa18d8r126ps1vfp4h05dh8r4; path=/ Expires: Thu,19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Transfer-Encoding: chunked Content-Type: text/html";
preg_match("/PHPSESSID=(.*?)(?:;|\r\n)/", $foo, $matches);
echo $matches[1];
Если может быть хорошей идеей проверить PHPSESSIDсуществование тоже:
$foo="HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Wed, 26 Sep 2011 19:10:48 GMT\r\nServer: Apache/2.2.16 (Win32) mod_ssl/2.2.16 OpenSSL/0.9.8o X-Powered-By: PHP/5.3.5 Set-Cookie: PHPSESSID=lsa18d8r126ps1vfp4h05dh8r4; path=/ Expires: Thu,19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Transfer-Encoding: chunked Content-Type: text/html";
if(preg_match("/PHPSESSID=(.*?)(?:;|\r\n)/", $foo, $matches)){
echo $matches[1];
}else{
/* Do something */
}