Sandhya Gor
Sandhya Gor

Reputation: 1460

Session container not working in zf2?

I have seen many questions on StackOverflow and I have this code

use Zend\Session\Container;

class IndexController extends AbstractActionController {

public function indexAction() {

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

When I am printing the $userSession container in the controller it is giving me this output

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 
    ) 
)

It means there is nothing like username...

But when I am printing the S_SESSION it gives me this output...

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 
        ) 
    ) 
)

There is a field username...

But when I am trying to get the $_SESSION in view it gives me the same output as above..

The problem is I am not able to get the username in both the container as well as in $_SESSION. I need it in the controllers. what can be the problem need help? Thank you.

Upvotes: 3

Views: 1843

Answers (3)

スージン
スージン

Reputation: 153

you can just get your username from session in controllers.

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

it work for me . try it !

Upvotes: 0

Wilt
Wilt

Reputation: 44346

I think you have to work on your configuration. You have to setup a common SessionManager to manage handling of your session information.

Something like this:

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

I would suggest registering your SessionManager config in your ServiceManager instance and then use it throughout the application.

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

You can then get your SessionManager in any controller:

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

And if you create a new Container it will use your common/default SessionManager instance automatically so all will be managed in one place.

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

On how to register your session_manager I will refer to the official ZF2 documentation.

Upvotes: 1

Code Lღver
Code Lღver

Reputation: 15603

You can use the following code:

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

This will return true or false on the basis of session exist or not.

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

Above code will return the value of session index username.

Instead of $userSession->username = 'Sandhya'; you can use below code:

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

This is zf2 standard, which is used by session container in zf2.

Upvotes: 0

Related Questions