2016-09-23 19 views
1

module.phpの2番目のページリクエストでクッキーを設定しようとしています。私のページ要求セッションセッターはうまくいくが、何とかクッキーが設定されていない。このクッキーが設定されていない理由を説明していますか?あなたがRepresentation of the Requestにクッキーを追加しているモジュール内にZF2がクッキーを設定しました

$request = $serviceManager->get('Request'); 
$headers = $request->getHeaders(); 
$locationCookie = new SetCookie('fzz', 'testing_cookie', strtotime('+1 Year', time()), '/'); 
$headers->addHeader($locationCookie); 

Module.php

あなたのコードを少しダウンTriming
public function onBootstrap(MvcEvent $e) 
    { 
     $application   = $e->getApplication(); 
     $eventManager  = $application->getEventManager(); 
     $moduleRouteListener = new ModuleRouteListener(); 
     $moduleRouteListener ->attach($eventManager); 
     $serviceManager  = $application->getServiceManager(); 
     //.. 
     if (php_sapi_name() !== 'cli') { 
      //.... 
      $this->_setUserTrackingCookie($serviceManager); 
     } 
    } 

    private function _setUserTrackingCookie($serviceManager) 
    { 
     $request = $serviceManager->get('Request'); 
     $headers = $request->getHeaders(); 
     $cookies = $request->getCookie(); 
     if (!$cookies->offsetExists('fzz')) { 
      $acceptingCookies = new Container('fzz'); 
      if (!$acceptingCookies->offsetExists('requests')) { 
       $acceptingCookies->offsetSet('requests', 1); 
      } else { 
       $cookieSalt   = Rand::getString(32, 'abcdefghijklmnopqrstuvwxyz1234567890', true); 
       $dbAdapter   = $serviceManager->get('Zend\Db\Adapter\Adapter'); 
       $table    = new \Application\Model\UserCookieTable($dbAdapter); 
       $userCookie   = new UserCookie(); 
       $userCookie->salt = $cookieSalt; 
       $userCookie->country = $country; 
       $table    ->insertUserCookie($userCookie); 
       $locationCookie  = new SetCookie('fzz', 'testing_cookie', strtotime('+1 Year', time()), '/'); 
       $headers    ->addHeader($locationCookie); 
      } 
     } 
    } 

答えて

0

は、クッキー設定部は、として読み込みます。この表現は表現には問題ありませんが、もちろんリクエストを変更することはできません。あなたが実際に何をしたいのか

ではなくResponseにCookieヘッダを追加することです:

$response = $serviceManager->get('Response'); 
$headers = $response ->getHeaders(); 
$locationCookie = new SetCookie('fzz', 'testing_cookie', strtotime('+1 Year', time()), '/'); 
$headers->addHeader($locationCookie); 

方法、実際のHTTPリクエストをチェックするZf-way以上であり:

if ($request instanceof \Zend\Http\PhpEnvironment\Request) { 
    $headers = $response ->getHeaders(); 
    $locationCookie = new SetCookie('fzz', 'testing_cookie', strtotime('+1 Year', time()), '/'); 
    $headers->addHeader($locationCookie); 
} 

CLIの場合、$requestZend\Console\Requestのインスタンスになります。

関連する問題