如何从 PHP 中的 Httpful 响应对象中提取 CouchDB cookie?

How to extract CouchDB cookie from Httpful response object in PHP?

我尝试通过 RESTful API 结合 CouchDB 和 Httpful 对用户进行身份验证。

客户端将用户的凭据发送到我的服务器,然后服务器将它们转发到 CouchDB 服务器。

当我 var_dump 响应时,我可以看到内容在那里,但我无法提取我想发送回客户端的 cookie。

我的服务器上的身份验证功能:

public function authenticate($request, $response)
{             
    $username = $request->getParsedBody()['username']; 
    $password = $request->getParsedBody()['password']; 

    $uri = "http://localhost:5984/_session";

    $sessionToken = \Httpful\Request::post($uri)    
        ->sendsJson()                                 
        ->body('{"name":"'.$username.'", "password":"'.$password.'"}')
        ->send();                                   

    $cookie = $sessionToken->headers->headers[6];

    return $response->withHeader('Set-Cookie', $cookie);
}

响应对象:

object(Httpful \ Response) # 56(13) {
    ["body"] => object(stdClass) # 58(3) 
        ...

    ["raw_body"]
        ...

    ["headers"] => object(Httpful \ Response \ Headers) # 57(1) {
        ["headers": "Httpful\Response\Headers": private] => array(6) {
            ...
            ["set-cookie"] => string(85)"AuthSession=abc123; Version=1; Path=/; HttpOnly"
        }
    }

    ["raw_headers"]
        ...

    ["code"]
        ...
}

错误信息:

Cannot access private property Httpful\Response\Headers::$headers

我想知道如何使用 Httpful 访问 Set-Cookie 属性。我就这个问题浏览了网页,不幸的是,似乎只有我一个人面临这个特殊问题。


我找到了解决办法:

我只需要将这两行添加到我的身份验证控制器中:

$myArray = array_values($sessionToken->_parseHeaders($sessionToken->raw_headers));

$cookie = $myArray[5];

我在 Httpful 的 API 文档中找到的 _parseHeaders 并结合 array_values.

进行了研究

Headers-class 的实例设置到 $sessionToken->headers,您可以像访问数组一样访问它。

你得到的 set-cookie header:

$sessionToken->headers['set-cookie'];