Comment vider un conteneur de session dans le cadre de Zend2

j'ai récemment commencé à construire une application en utilisant Zendfram Framework 2 , j'ai une bonne expérience en ZF1 , le problème majeur auquel je fais face ici avec ZF2 est avec les sessions .

Voici comment je crée un conteneur de session .

use ZendSessionContainer;

// Session container creation: (précédemment nous l'appelions namespaces )

$session_user = new Container('user');
$session_user_errors = new Container('usererrors');
$session_user_shares = new Container('usershares');

maintenant comme ceci j'ai plusieurs conteneurs,

je pourrais effacer une clé d'un conteneur particulier comme ce

// mise en valeur de la session en touche: ( valorisation de l'espace de noms )

$email = $session_user->offsetGet('email');

> / définir la valeur dans la session: (définir la valeur à partir de namespace )

$session_user->offsetSet('username', 'abcd');

Maintenant mon problème est de vider un récipient entier qui sont définies dans plusieurs niveaux de mon application .

si j'essaie le code ci-dessous il nettoie tous les conteneurs de ma session .

$session_user = new Container('user');
$session_user->getManager()->getStorage()->clear();

je veux effacer seulement le conteneur appelé 'user' qui a beaucoup de clés ( Je ne veux pas savoir à quoi tout sera là à la fin ) . Est-il un moyen pour atteindre cet

je sais que je peux faire des offsetunset sur chaque touche mais ce n'est pas une solution optimale que je sens .

veuillez indiquer s'il existe une autre façon de vider un conteneur de session .

NOTE : - Je n'utilise aucun des modules tiers comme les sessions ZfcUser et Akrabat

Merci d'avance d'avoir répondu à cette annonce .

18
demandé sur akond 2013-03-04 09:43:31

6 réponses

vous l'aviez presque, vous avez juste besoin de passer le namespace à la méthode clear

$session_user->getManager()->getStorage()->clear('user');

vous pouvez toujours traiter $_SESSION comme un tableau, donc ce qui suit fonctionne aussi

unset($_SESSION['user']); 
42
répondu Crisp 2013-03-04 06:45:21
  • utilisation des fonctionnalités de base de PHP

    session_start() fonction démarre la session.

    session_destroy() fonction supprime les données stockées dans le tableau de session.

utilise maintenant la fonctionnalité Zend Framework:

pour une compréhension claire permet d'abord, créer une session dans le cadre de Zend et ensuite faire une suppression processus.

  1. Création De Session

utiliser Zend\Session\Container;

$session_container = nouveau Conteneur('user_session');

$session_container - >last_login = date ('Y-m-d H:i:s');

$session_container - >sess_token = trim (base64_encode (md5 (microtime())), "= " );

  1. Suppression De Session

$ session = new Conteneur("user_session");

$ session->getManager ()->getStorage () - >clear('user_session');

user_session est le nom de la clé du tableau de session pour stocker les informations.

2
répondu Mohd Belal 2017-12-22 10:05:25

la Solution Postée par @Crisp a fonctionné comme un charme mais voici la façon alternative ce que j'ai trouvé après une recherche pour résoudre ce problème

use Zend\Session\SessionManager;

$sessionManager = new SessionManager();

//get array of sessions from storage 
$array_of_sessions = $sessionManager->getStorage();

//Unset which ever container you want by passing its name ( ZF1 its called namespace ) 
 unset($array_of_sessions['user']);
 unset($array_of_sessions['usershares']);
 unset($array_of_sessions['actions']);

je pense que le gestionnaire de session est celui que nous devons utiliser pour gérer les sessions que ce soit pour effacer ou lire et container est l'une des entités qui est gérée par le gestionnaire de session .

cela peut aider les autres qui sont possessifs dans la création des objets de chaque conteneur de session et appeler méthode claire .

1
répondu aravind.udayashankara 2013-03-04 08:21:32

Pour détruire toutes les sessions:

  $session = new Container('base');
  $session->getManager()->destroy();

  or

utilisez la simple fonction de destruction de php:

 session_destroy();

Cette fonction efface toutes les sessions.

j'espère que cette aide.

0
répondu user2644574 2013-08-06 10:13:30

Dans ZF2, pour l'utilisation des Conteneurs;

Créer un conteneur:

$sessionTokenizer = new Container('token');

Définir la variable dans le conteneur

$token = $sessionTokenizer->token;

Destroy container (ONLY CONTAINER)

$sessionTokenizer->offsetUnset();
-1
répondu Agustincl 2015-03-30 19:55:40

Vous pouvez effacer session comme ceci:

$this - > session- > exchangeArray (array ());

-2
répondu Lucas Tourinho Cavalcante 2014-03-01 01:17:07