10

「rememberme」システムを実現するために、ログインコントローラ内にCookieを設定しようとしています。Webで見つけた正確なコードを使用しましたが、問題が発生しています。私が欠けているものを理解するのを手伝ってくれることを願っています。

コードを見てみましょう:

public function loginAction(Request $request) {
// Receiving the login form
// Get Doctrine, Get EntityManager, Get Repository
if(/* form information matche database information */) {
     // Creating a session => it's OK
     // Creating the cookie
     $response = new Response();
     $response->headers->setCookie(new Cookie("user", $user));
     $response->send();
     $url = $this->generateUrl('home');
     return $this->redirect($url);

} else 
     return $this->render('***Bundle:Default:Login.html.php');
}

私はこれらを含めました:

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Cookie;

ログインは正常に機能し、セッションは作成されていますが、Cookieは作成されていないことに注意してください。

4

2 に答える 2

18

それ以外の:

$response->send();

使用してみてください:

$response->sendHeaders();

この後、リダイレクトできるようになります。

于 2013-06-28T07:42:19.910 に答える
17

デフォルトでは、 Symfony \ Component \ HttpFoundation \ CookieHttpOnlyとして作成され、サポートしているブラウザのセキュリティ対策をトリガーします。これは、JavaScriptで発生する可能性のある特定のXSS攻撃を軽減するのに役立ちます。

このようなブラウザでCookieを公開するには、$httpOnly引数をfalse次のように設定します。

new Cookie('user', $user, 0, '/', null, false, false); //last argument

この編集の時点で、フレームワークはデフォルトでHttpOnly Cookieを使用しないように構成されていることに注意してください。クックブック(cookie_httponly)を参照してください。

于 2012-07-20T05:11:15.657 に答える