2012-07-19 24 views
10

"Remember me"システムを実現するためにログインコントローラ内にクッキーを設定しようとしています。私がウェブ上で見つけた正確なコードを使用したとしても、私の事は間違っています。私はあなたが私が逃しているものを理解するのを助けることができれば嬉しいですSymfony2:クッキーを設定する

のコード見ていきましょう:

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; 

注意を、セッションが作成されましたが、クッキーはしていません。

答えて

17

デフォルトでは、Symfony\Component\HttpFoundation\Cookieは、HttpOnlyとして作成され、サポートするブラウザでセキュリティ対策を起動します。これはjavascriptで可能な特定のXSS攻撃を緩和するのに役立ちます。

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

それは、この編集時にフレームワークはない使用HttpOnlyのデフォルトではクッキーに設定されていることは注目に値します:参照

、ブラウザでクッキーを公開するためには、$httpOnly引数falseに設定しましたcookbook (cookie_httponly)

+0

これは機能します。おかげでm2mdas。 –

15

の代わりに:

$response->send(); 

は、使用しよう:この後

$response->sendHeaders(); 

あなたがリダイレクトすることができるはずです。

+0

ありがとう、これは本当に奇妙な問題を解決しました。 –

+0

ありがとう、それも私を助けた – Shaolin

関連する問題