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 .
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']);
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.
- 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())), "= " );
- Suppression De Session
$ session = new Conteneur("user_session");
$ session->getManager ()->getStorage () - >clear('user_session');
Où user_session est le nom de la clé du tableau de session pour stocker les informations.
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 .
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.
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();
Vous pouvez effacer session comme ceci:
$this - > session- > exchangeArray (array ());