簡體   English   中英

會話容器在zf2中不起作用?

[英]Session container not working in zf2?

我在StackOverflow上看到很多問題,我有這個代碼

use Zend\Session\Container;

class IndexController extends AbstractActionController {

public function indexAction() {

     $userSession = new Container('user');
     $userSession->username = 'Sandhya';
     return new ViewModel();
     }
}

當我在控制器中打印$userSession容器時,它給我這個輸出

Zend\Session\Container Object ( 
    [name:protected] => user 
    [manager:protected] => Zend\Session\SessionManager Object (
        [defaultDestroyOptions:protected] => Array ( 
            [send_expire_cookie] => 1 
            [clear_storage] => 
        ) 
        [name:protected] => 
        [validatorChain:protected] => 
        [config:protected] => Zend\Session\Config\SessionConfig Object (
            [phpErrorCode:protected] => 
            [phpErrorMessage:protected] => 
            [rememberMeSeconds:protected] => 240 
            [serializeHandler:protected] => 
            [validCacheLimiters:protected] => Array (
                [0] => nocache 
                [1] => public 
                [2] => private 
                [3] => private_no_expire 
            ) 
            [validHashBitsPerCharacters:protected] => Array ( 
                [0] => 4 
                [1] => 5 
                [2] => 6 
            ) 
            [validHashFunctions:protected] => 
            [name:protected] => 
            [savePath:protected] => 
            [cookieLifetime:protected] => 2592000 
            [cookiePath:protected] => 
            [cookieDomain:protected] => 
            [cookieSecure:protected] => 
            [cookieHttpOnly:protected] => 1 
            [useCookies:protected] => 1 
            [options:protected] => Array ( 
                [gc_maxlifetime] => 2592000 
            ) 
        ) 
        [defaultConfigClass:protected] => Zend\Session\Config\SessionConfig     
        [storage:protected] => Zend\Session\Storage\SessionArrayStorage Object (
        ) 
        [defaultStorageClass:protected] => Zend\Session\Storage\SessionArrayStorage 
        [saveHandler:protected] => 
    ) 
    [storage:protected] => Array ( ) 
    [flag:protected] => 2 
    [iteratorClass:protected] => ArrayIterator 
    [protectedProperties:protected] => Array ( 
        [0] => name 
        [1] => manager 
        [2] => storage 
        [3] => flag 
        [4] => iteratorClass 
        [5] => protectedProperties 
    ) 
)

這意味着沒有像username ...

但是當我打印S_SESSION它給了我這個輸出......

Array ( 
    [__ZF] => Array ( 
        [_REQUEST_ACCESS_TIME] => 1429081041.81 
    ) 
    [user] => Zend\Stdlib\ArrayObject Object ( 
        [storage:protected] => Array ( 
            [username] => Sandhya 
        ) 
        [flag:protected] => 2 
        [iteratorClass:protected] => ArrayIterator     
        [protectedProperties:protected] => Array ( 
            [0] => storage 
            [1] => flag 
            [2] => iteratorClass 
            [3] => protectedProperties 
        ) 
    ) 
)

有一個字段username ...

但是當我試圖在視圖中獲得$_SESSION ,它給出了與上面相同的輸出。

問題是我無法在容器和$_SESSION獲取username 我需要它在控制器中。 可能有什么問題需要幫助? 謝謝。

我認為你必須處理你的配置。 您必須設置一個通用的SessionManager來管理會話信息的處理。

像這樣的東西:

$sessionConfig = new SessionConfig();
$sessionConfig->setOptions($config);
$sessionManager = new SessionManager($sessionConfig);
$sessionManager->start();
Container::setDefaultManager($sessionManager);

我建議在ServiceManager實例中注冊SessionManager配置,然后在整個應用程序中使用它。

'service_manager' => array(
    'factories' => array(
        'session_manager' => 'My\Factory\SessionManagerFactory'
    )
)

然后,您可以在任何控制器中獲取SessionManager:

$sessionManager = $this->serviceLocator->get('session_manager');

如果您創建一個新的Container它將自動使用您的公共/默認SessionManager實例,因此所有將在一個地方進行管理。

$userSession = new Container('user');
$userSession->getManager() === $this->serviceLocator->get('session_manager') // true

關於如何注冊session_manager,我將參考官方的ZF2文檔

您可以使用以下代碼:

$userSession = new Container('user');
//To check the session variable in zf2:
if($userSession->offsetExists('username')){
   //Your logic after check condition
}

這將根據會話是否存在返回true或false。

//To get the value of session:
echo $user->offsetGet('username');

上面的代碼將返回會話索引username的值。

而不是$userSession->username = 'Sandhya'; 你可以使用下面的代碼:

$user->offsetSet('username','Sandhya');

這是zf2標准,由zf2中的會話容器使用。

你可以從控制器中的會話中獲取用戶名。

 $userSession = new Container('user');
 $username = $userSession->username ;
 var_dump($username); //Sandhya

它對我有用。 試試吧 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM