将Cookie从第一次响应复制到下一个请求

时间:2010-11-18 07:13:02

标签: php cookies httprequest

我正在使用HttpRequest-> send()发送第一个HTTP请求,并且我收到带有以下Set-Cookie标头的302响应:

  • Set-Cookie:SESSION_SCOPE = 1; path = /
  • Set-Cookie:III_EXPT_FILE = aa2171;路径= /; domain = .example.com
  • Set-Cookie:III_SESSION_ID = 193a3ce5aaadea85937c25cd0430332f;域= .example.com的; path = /

当我使用HttpRequest-> getResponseCookies()时,这就是提取内容的样子:

Array ( 
 - [0] => stdClass Object ( [cookies] => Array ( [SESSION_SCOPE] => 1 ) [extras] => Array ( ) [flags] => 0 [expires] => 0 [path] => / [domain] => ) 
 - [1] => stdClass Object ( [cookies] => Array ( [III_EXPT_FILE] => aa2171 ) [extras] => Array ( ) [flags] => 0 [expires] => 0 [path] => / [domain] => .example.com ) 
 - [2] => stdClass Object ( [cookies] => Array ( [III_SESSION_ID] => 193a3ce5aaadea85937c25cd0430332f ) [extras] => Array ( ) [flags] => 0 [expires] => 0 [path] => / [domain] => .example.com )
 ) 

现在我需要将这些cookie复制到重定向位置的下一个传出请求。我正在使用HttpRequest-> setCookies(),其中参数是从之前的getResponseCookies()调用返回的数组。

我在传出请求中看到的是:

Cookie: 0%5Bcookies%5D%5BSESSION_SCOPE%5D=1; 0%5Bflags%5D=0; 0%5Bexpires%5D=0; 0%5Bpath%5D=%2F; 0%5Bdomain%5D=; 1%5Bcookies%5D%5BIII_EXPT_FILE%5D=aa2171; 1%5Bflags%5D=0; 1%5Bexpires%5D=0; 1%5Bpath%5D=%2F; 1%5Bdomain%5D=.example.com; 2%5Bcookies%5D%5BIII_SESSION_ID%5D=193a3ce5aaadea85937c25cd0430332f; 2%5Bflags%5D=0; 2%5Bexpires%5D=0; 2%5Bpath%5D=%2F; 2%5Bdomain%5D=.example.com

我的问题是:

  1. 这样做的正确方法是什么?因为显然数组索引也被添加到标题中
  2. 如何阻止参数的url编码?
  3. 如何防止将“路径”和“域”属性添加到标题中?
  4. 谢谢!

1 个答案:

答案 0 :(得分:3)

解决了它。在我固有的新手中,我使用单独的HttpRequest对象进行第一次和第二次交易。

相反,在创建第一个请求后,我只是调用enableCookies() method并重新使用相同的对象发送第二个请求。

简而言之:

$URL1 = (main url);

/* Construct and send the first request */
$r1 = new HttpRequest ($URL1, METH_POST);
$r1->enableCookies();
$r1->setPostFields (...);
$r1->send();

/* Verify that the response is in fact a 302 first! */

$URL2 = $URL1 . $r1->getResponseHeader("Location");

/* Construct and send the second request */
$r1 = new HttpRequest ($URL2, METH_POST);
$r1->send();

/* Success! */