2012-07-19 138 views
10

我試圖在登錄控制器內設置一個cookie來實現「記住我」系統。儘管我已經使用了我在網上找到的確切代碼,但對我而言,事情卻出錯了。我希望你能幫我弄清楚我錯過了什麼。Symfony2:設置cookie

讓我們通過代碼:

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沒有。

回答

17

默認Symfony\Component\HttpFoundation\Cookie創建爲HttpOnly,它觸發支持瀏覽器的安全措施;這有助於緩解JavaScript中可能發生的某些XSS攻擊。

爲了揭露餅乾這樣的瀏覽器設置$httpOnly參數false

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

值得一提的是,在此編輯的時間框架被設計成使用的HttpOnly默認餅乾:看cookbook (cookie_httponly)

+0

工作。謝謝m2mdas。 – 2012-07-20 12:55:39

15

相反的:

$response->send(); 

嘗試使用:

$response->sendHeaders(); 

在這之後,你應該能夠重定向。

+0

謝謝,這解決了一個非常奇怪的問題。 – 2013-08-12 08:58:24

+0

謝謝,它也幫助我 – Shaolin 2015-12-09 15:59:47