我想用codeception測試我的ajax腳本& PhpBrowser(使用Mink和Goutte驅動程序)。您可以讓貂貂遵循從https到http的重定向並保持會話?
我的ajax腳本需要經過身份驗證的會話才能執行,而會話是通過我的登錄頁面創建的。
我在使用PhpBrowser/Link會話時遇到問題,要在登錄後保留。
我創建了一個PhpBrowser助手功能覆蓋_initialize,所以我可以得到HTTPS使用自簽名的證書我的測試服務器上的工作是這樣的:
public function _initialize()
{
$client = new \Behat\Mink\Driver\Goutte\Client();
$driver = new \Behat\Mink\Driver\GoutteDriver($client);
$curl_config = array_merge($this->curl_defaults, $this->config['curl']);
array_walk($curl_config, function($a, &$b) { $b = "curl.$b"; });
$curl_config['ssl.certificate_authority']=false;
$client->setClient(new \Guzzle\Http\Client('', $curl_config));
$client->followRedirects(true);
$this->session = new \Behat\Mink\Session($driver);
\Codeception\Util\Mink::_initialize();
}
現在,當我跑我的驗收測試,好像登錄工作正常,並且重定向基於apache access_logs發生,但PHPSESSID cookie不會持續存在,所以我登錄後的所有訪問請求都是未經授權的。
我試着在驗收測試之前和重定向後比較
$I->getCurrentUrl()
$I->getResponseHeaders()
測試此。
currentUrl()返回值永遠不會到達重定向目的地,儘管apache access_logs說不然。
getResponseHeaders()在表單提交後返回一個PHP_SESSID cookie,但它在所有請求之後都不存在。
任何想法/猜測爲什麼在重定向後登錄期間創建的會話不會持續存在?
我是否需要對Mink會話進行任何特殊配置才能讓他們遵循重定向,還是我在做其他錯誤?
在此先感謝您的幫助!
-Ed