2017-03-10 12 views
0

私のクッキーが送信されない理由を理解できません。 私はそれについてのすべてのスレッドをチェックして、それは私が正しくやっているようだ。 私のブラウザではなく、Symfonyのデバッグでクッキーが見えません。ここでsymfonyのクッキーが送信されませんでしたが(レスポンスヘッダ内)

public function indexAction(Request $request) 
{ 


    $response = new Response(); 
    $userID = $request->cookies->get('myCookie123'); 

    if (empty($userID)) { 

     $uniqueID = $this->generateIDUtil(); 
     $response->headers->setCookie(new Cookie('myCookie123', $uniqueID, 2147483647)); 
     $response->sendHeaders(); 

    }else{ 
     var_dump('USER ALREADY KNOW <br>'); 
    } 

    var_dump($response->headers->getCookies()); //GIVES CORRECT COOKIE OBJECT 
    var_dump('<br>'); 
    var_dump($request->cookies->all()); //GIVES ONLY PHPSESSID, BUT NOT THE ONE CREATED 
    var_dump('<br>'); 
    var_dump($request->cookies->get('myCookie123')); //GIVES NULL 


    return $response->setContent($this->render('MyBundle:Core:index.html.twig')); 
} 

enter image description here

答えて

0

ここでは、クッキーからuserIdを取得したいと思う人のためのコードです。すべてのuseステートメントと小枝のレンダリングテンプレート。

上記の解決策の問題点は、ビューをレンダリングせずにヘッダーを送信すると、空白のページが表示されることです。

本当にひどく記述されているので、ここでは解決策があります。

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Cookie; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 

class tempController extends Controller 
{ 
    public function indexAction(Request $request) 
    { 

     $user = $request->cookies->get('myCookie'); // $user is a string (the userID) or null if there is no cookie. 

     if (!empty($user)) { 
      //Fetch user data in the DB 
     } 

     // some code ... 


     $response = new Response(); 

     if ($user instanceof User) { 
      // do some stuff like pre fill a form 
     }else{ 
      // We don't know the user we send a cookie. 
      $cookie = new Cookie('myCookie', $this->generateIDUtil(), time() + (365 * 24 * 60 * 60)); // Expires 1 years 
      $response->headers->setCookie($cookie); 
      $response->sendHeaders(); 
     } 

     //Render the view WITH the response (It's very important to put $response as 3rd parameter) 
     return $this->render('MyBundle:Core:index.html.twig', array(/* view param */), $response); 
    } 
} 
+0

こんにちはそこに。私が与えた上記の解決策は、はい、クッキーをヘッダーとして設定するだけです。通常どおりページをレンダリングする必要があります。私が通常行っていることは、クッキーを設定してからルートにリダイレクトすることです。例えば、 'return $ this-> redirectToRoute( 'homepage');' '$ response-> send();'の直後に同じページをレンダリングすることさえできます。 –

1

あなたが適切にクッキーを作成し、クライアントへの応答として送信する方法である:

$res = new Response(); 
$cookie = new Cookie(
     'my_cookie', 
     $student->getStuId(), 
     time() + (2 * 365 * 24 * 60 * 60) // Expires 2 years. 
); 
$res->headers->setCookie($cookie); 
$res->send(); 

私はそれをすべての時間を使用するので、あなた場合はお知らせください。まだ問題があります。

+0

Thx、最後に動作します。私は問題が何だったのか分かりません。 Cookieクラスでの私の時間設定、あるいは私のUSEステートメントが乱れていました。 唯一の違いは、持続時間の猶予があり、 - > senHeaderの代わりにsendを使用しているためです。何かありがとう! –

+0

$ res-> send();空白のページにつながります。私は、ビューをレンダリングし、空白のページを避けるためにソリューションを声に出した –

関連する問題