2014-01-10 86 views
0

我想更改PHPSESSID名稱和值。我可以說出名字,但我無法改變價值。 我有以下結構。我如何改變sessionid的價值。如何更改sessionid值Zend Framework 2

我module.config.php是

return array(
    'session'   => array(
     'config'  => array(
      'class' => 'Zend\Session\Config\SessionConfig', 
      'options' => array(
       'name' => 'portal1' 
      ), 
     ), 
     'storage' => 'Zend\Session\Storage\SessionArrayStorage', 
     'validators' => array(
      array(
       'Zend\Session\Validator\RemoteAddr', 
       'Zend\Session\Validator\HttpUserAgent', 
      ), 
     ), 
    ), 
); 

我Module.php

public function onBootstrap($e) { 
    $this->bootstrapSession($e); 
} 

public function bootstrapSession($e) { 
    $session = $e->getApplication() 
      ->getServiceManager() 
      ->get('Zend\Session\SessionManager'); 
    $session->start(); 

    $container = new Container('initialized'); 
    if (!isset($container->init)) { 
     $session->regenerateId(true); 
     $container->init = 1; 
    } 
} 

public function getServiceConfig() { 
    return array(
     'factories' => array(
      'Zend\Session\SessionManager'   => function ($sm) { 
       $config = $sm->get('config'); 
       if (isset($config['session'])) { 
        $session = $config['session']; 

        $sessionConfig = null; 
        if (isset($session['config'])) { 
         $class   = isset($session['config']['class']) ? $session['config']['class'] 
          : 'Zend\Session\Config\SessionConfig'; 
         $options  = 
          isset($session['config']['options']) ? $session['config']['options'] : array(); 
         $sessionConfig = new $class(); 
         $sessionConfig->setOptions($options); 
        } 

        $sessionStorage = null; 
        if (isset($session['storage'])) { 
         $class   = $session['storage']; 
         $sessionStorage = new $class(); 
        } 

        $sessionSaveHandler = null; 
        if (isset($session['save_handler'])) { 
         $sessionSaveHandler = $sm->get($session['save_handler']); 
        } 

        $sessionManager = new SessionManager($sessionConfig, $sessionStorage, $sessionSaveHandler); 

        if (isset($session['validator'])) { 
         $chain = $sessionManager->getValidatorChain(); 
         foreach ($session['validator'] as $validator) { 
          $validator = new $validator(); 
          $chain->attach('session.validate', array($validator, 'isValid')); 

         } 
        } 
       } else { 
        $sessionManager = new SessionManager(); 
       } 
       Container::setDefaultManager($sessionManager); 

       return $sessionManager; 
      }, 
     ), 
    ); 
} 

MyController.php的;我想在這裏更改PHPSESSID鍵和值。

public function loginAction() { 
    $container = new Container(); /* 
    i want to change PHPSESSID key and value 
    eg: portal1: fafsafg43kgfdsgfds //my sessionid value 
    */ 
} 

回答

1

嗯,我想澄清一些前回答這個問題 - 什麼劑量,意思是「我想改變PHPSESSID鍵和值」 據我知道你想改變「PHPSESSID」文本。這意味着你想以不同的名字來稱呼它,比如「MySessionId」不是嗎?

其實我沒有權限寫評論,我可以問問!

無論如何,如果你想用不同的名稱來稱呼它,而不是它的服務器的PHP會話設置的問題。所以,請諮詢服務器的會話部分。您可以從http://php.net/manual/en/session.configuration.php#ini.session.namehttp://php.net/manual/en/function.session-name.phphttp://php.net/manual/en/function.session-name.php 獲得幫助.ZF還允許您通過Zend \ Session \ Config \ SessionConfig類或Zend \ Session \ SessionManager類更改該名稱,您必須通過調用setName方法來設置首選名稱。

現在,如果您想要更改會話ID(其自動生成並將其保存到PHPSESSID中)的值,您可以在ZF中執行此操作。這裏是ZF2的代碼明確設置值

$container->getManager()->setId($id); # For current session manager of your container 
$container->getDefaultManager()->setId($id); # For default session manager of your entire app 

在上面的代碼$ id是你想要設置的值。