2016-09-23 4 views
1

module.php의 두 번째 페이지 요청시 쿠키를 설정하려고합니다. 내 페이지 요청 세션 설정자는 잘 작동하지만 어떻게 든 쿠키가 설정되지 않습니다. 이 쿠키가 설정되지 않은 이유에 대한 설명이 있습니까? 당신은 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

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은 당신의 코드를 아래로 조금, 쿠키 설정 부분을 읽습니다. 이것은 표현을 위해 아주 잘 작동하지만 실제로 요청을 수정할 수는 없습니다. 당신이 실제로 수행 할 작업을

대신 Response에 쿠키 헤더를 추가하는 것입니다

$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의 인스턴스가됩니다.

관련 문제