2016-09-23 1 views
1

Я пытаюсь установить cookie при запросе второй страницы внутри module.php. Мой сеансовый сеттер работает хорошо, но как-то cookie не установлен. Есть ли объяснение, почему этот файл cookie не установлен?ZF2 set cookie внутри модуля

module.php

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

Triming вниз ваш код немного, установка печенья часть гласит:

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

Вы хотите добавить печенье к Representation of the Request. Хотя это довольно хорошо подходит для представления, мы не можем фактически модифицировать запрос, конечно.

То, что вы на самом деле хотите сделать это, чтобы добавить заголовок Cookie в Response вместо:

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

Существует кстати более Zf-way проверки для фактического запроса HTTP:

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

В CLI вместо $request будет экземпляр Zend\Console\Request.