私が働いている会社が使用している Web アプリケーションの代替を構築しています。これは CakePHP 1.3 を使用して構築され、Symfony 2 を使用してゼロから書き直しています。2 つのシステムは並行して実行され、さまざまな機能が Symfony 2 に転送され、古い CakePHP アプリケーションから削除されます。
ログインの詳細との混乱を避けるために、CakePHP を完全にオフにして Symfony 2 のセキュリティに依存できるようになるまで、CakePHP でユーザー ログイン側を処理するようにします。その間、CakePHP アプリケーションは、ユーザー ID を含む Cookie を生成します。セキュリティの初歩的な形として、Symfony でこの Cookie を使用したいと考えています。
ただし、作成された Cookie を Symfony に読み取らせたりロードさせたりすることはできません。これが私のコードです:
public function securitytestAction()
{
$request = $this->getRequest($_COOKIE);
$cookie = $request->headers->getCookies('CakeCookie[passport]');
print_r($cookie);
return $this->render('InstructorBundle:Default:test.html.twig');
}
Firebug を使用すると、CakePHP がログイン時に生成する Cookie は「CakeCookie[passport]」という名前になります。暗号化もされていません。
私が得るエラーはこれです:
FatalErrorException: エラー: DefaultController.php 行 713 の未定義メソッド Symfony\Component\HttpFoundation\HeaderBag::getCookies() への呼び出し
これを機能させるにはどうすればよいですか?
編集
Cheesemacfly は次の置き換えを提案していました:
$request = $this->getRequest($_COOKIE);
$cookie = $request->headers->getCookies();
これだけで:
$request = $this->getRequest()->cookies->all();
次の応答が返されます。
配列 ( [PHPSESSID] => gptbmh61mfkqn6p86d3suhnt13 )
編集 2
CakePHP が Cookie を生成するために使用したコードを見てきましたが、Cookie のドメインを提供していませんでした。.domain.org
サブドメインからもアクセスできるように、ドメインが になるように修正し
ここで、Firebug を使用して Symfony2 アプリケーションにアクセスすると、Cookie が他の 2 つの CakePHP セッション Cookie (必要ありません) と一緒にリストされていることがわかります。3 つの CakePHP ドメインはすべてwww.domain.org
、サブドメインnew.domain.org
を表示する場合でも使用しますが、Symfony2 が使用する 1 つの Cookie は、ドメイン名をnew.domain.org
.Symfony2 として表示しますが、必要な Cookie の読み込みを拒否します。