2014-02-23 6 views
0

내 응용 프로그램에서 ZfcUser를 사용하고 있으며 시간 초과 매개 변수를 제어해야합니다. 구성의 일부가 아니기 때문에 부트 스트랩에서 ZfcUser에 내 자신의 Zend/Session 개체 (remember_me_seconds 매개 변수 사용)를 설정하고 싶습니다. 그러나 어떻게해야할지 모르겠습니다.Zend/Session with ZfcUser

우연히 이미이 작업을 수행 한 사람이 있습니까?

답변

0

나는 zfcuser를 사용하지만이

자동로드 여기/global.php

<?php 

use Zend\Session\Config\SessionConfig; 
use Zend\Session\SessionManager; 
use Zend\Session\Container; 

return array(
    'service_manager' => array(
     'factories' => array(
      'SessionManager' => function($sm) { 
       $sessionConfig = new SessionConfig(); 
       $sessionConfig->setOption('remember_me_seconds', 1440); 

       $sessionManager = new SessionManager($sessionConfig); 
       Container::setDefaultManager($sessionManager); 

       return $sessionManager; 
      }, 
     ), 
    ), 
); 

Module.php

public function onBootstrap($event) 
{ 
    $serviceManager = $event->getApplication()->getServiceManager(); 
    $serviceManager->get('SessionManager')->start(); 
} 
+0

나는 이보다 더 복잡 할까 두렵습니다. 세션은 어떤 식 으로든 ZfcUser에 연결되어야합니다 ... –

+0

시도해 보셨습니까? – user291196

0

내가 그것을 어떻게입니다하지 않습니다. 나는 세계 최고의 코더가 아니지만 이것이 효과가있는 것으로 보인다. 이 Module.php

public function onBootstrap(MvcEvent $e) 
{ 
    $eventManager  = $e->getApplication()->getEventManager(); 
    $sharedManager  = $eventManager->getSharedManager(); 
    $sm = $e->getApplication()->getServiceManager();   
    //This checks to see if the user is logged in. 
    $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'checkLogin'), 100); 


} 

//This function is attached to a listener to see if the user is not currently logged in 
//If they are not logged in they will be redirected to the login page. This check will happen through the 
//application so there is no need to keep checking in other modules 
public function checkLogin (MvcEvent $e) 
{ 



    $session = new Container('defaults');   
    $this->route = $e->getRouteMatch(); 
    $this->matchedRouteName = explode('/', $this->route->getMatchedRouteName()); 
    $this->route_root = $this->matchedRouteName[0]; 
    $sm = $e->getApplication()->getServiceManager(); 

    $zfcServiceEvents = $sm->get('ZfcUser\Authentication\Adapter\AdapterChain')->getEventManager(); 

    $zfcServiceEvents->attach(
      'authenticate', 
      function ($e) use ($session) { 
      $session->offsetSet('sessionstart', $_SERVER['REQUEST_TIME']); 
      } 
    ); 

    $auth = $sm->get('zfcuser_auth_service'); 

    if (!$auth->hasIdentity() && $this->route_root != 'zfcuser') 
    { 
     $response = new \Zend\Http\PhpEnvironment\Response(); 
     $response->getHeaders()->addHeaderLine('Location', '/user/login'); 
     $response->setStatusCode(302); 
     $response->sendHeaders(); 
     $e->stopPropagation(true); 
     return $response; 
    } 

    else if ($auth->hasIdentity() && $session->offsetGet('sessionstart') < ($_SERVER['REQUEST_TIME'] - 10800) && $this->route_root != 'zfcuser') 
    { 
     $response = new \Zend\Http\PhpEnvironment\Response(); 
     $response->getHeaders()->addHeaderLine('Location', '/user/logout'); 
     $response->setStatusCode(302); 
       $response->sendHeaders(); 
       $e->stopPropagation(true); 
       return $response; 
    } 

    else if ($auth->hasIdentity()) 
    { 
    $session->offsetSet('sessionstart', $_SERVER['REQUEST_TIME']); 
    }  
} 
1

의 모든 세션 PARAMS을 설정하는 가장 쉬운 방법입니다 config\autoload\global.php

return array(
    'service_manager' => [ 
     'factories' => [ 
      // Configures the default SessionManager instance 
      'Zend\Session\ManagerInterface' => 'Zend\Session\Service\SessionManagerFactory', 
      // Provides session configuration to SessionManagerFactory 
      'Zend\Session\Config\ConfigInterface' => 'Zend\Session\Service\SessionConfigFactory', 
     ], 
    ], 
    'session_manager' => [ 
     // SessionManager config: validators, etc 
    ], 
    'session_config' => [ 
     'cache_expire' => 86400, 
     'cookie_lifetime' => 86400, 
     'remember_me_seconds' => 86400, 
     'gc_probability' => 10, 
     'gc_divisor' => 1000, 
     'use_cookies' => true, 
     'cookie_httponly' => true, 
     'cookie_lifetime' => 0, // to reset lifetime to maximum at every click 
     'gc_maxlifetime' => 86400, 
    ], 
); 

을 다음과 Module.php

public function onBootstrap(MvcEvent $e) 
{ 
    $manager = $e->getApplication()->getServiceManager()->get('Zend\Session\ManagerInterface'); 
} 

이 마음대로 onBootstrap 방법에 줄을 추가로이다 세션 설정에 영향을 주며 phpinfo()에 표시됩니다.

찾았습니다. zfcuser github