J'ai récemment commencé à construire une application utilisant Zendframework 2, j'ai une bonne expérience de ZF1, le principal problème auquel je suis confronté ici avec ZF2 est celui des sessions.
Voici comment je crée un conteneur de session.
use Zend\Session\Container;
// Création du conteneur de session: (auparavant, nous l'appelions comme espaces de noms)
$session_user = new Container('user');
$session_user_errors = new Container('usererrors');
$session_user_shares = new Container('usershares');
Maintenant, comme cela, j'ai plusieurs conteneurs,
Je pourrais nettoyer une clé d'un conteneur particulier comme celui-ci
// Obtention de valeur de la session par clé: (extrait de l'espace de nom)
$email = $session_user->offsetGet('email');
// Définition de la valeur en session: (définir la valeur à partir de l'espace de noms)
$session_user->offsetSet('username', 'abcd');
Maintenant, mon problème est de vider tout un conteneur qui est défini dans plusieurs niveaux de mon application.
Si j'essaie le code ci-dessous, il efface tous mes conteneurs de session.
$session_user = new Container('user');
$session_user->getManager()->getStorage()->clear();
Je veux effacer seulement le conteneur appelé 'utilisateur' qui a beaucoup de clés (je ne sais pas ce que tout sera là à la fin). Y a-t-il un moyen d'y parvenir
Je sais que je peux faire du offsetunset sur chaque touche, mais je ne pense pas que ce soit une solution optimale.
S'il vous plaît veuillez suggérer s'il existe une autre solution pour effacer un conteneur de session particulier.
NOTE: - Je n'utilise aucun des modules tiers tels que les sessions ZfcUser et Akrabat
Merci d'avance de répondre à cette annonce.
Vous l'avez presque eu, il vous suffit de passer l'espace de noms à la méthode clear
$session_user->getManager()->getStorage()->clear('user');
Vous pouvez toujours traiter le $ _SESSION comme un tableau aussi, donc ce qui suit fonctionne aussi
unset($_SESSION['user']);
Voici les détails pour détruire la session dans Zend Framework 2:
Utilisation de la fonctionnalité PHP de base
La fonction session_start()
démarre la session.
La fonction session_destroy()
supprimeALLles données stockées dans le tableau de session.
Maintenant, en utilisant les fonctionnalités de Zend Framework:
Pour une compréhension claire, commençons par créer une session dans Zend Framework, puis créez un processus de suppression.
utilisez Zend\Session\Container;
$ session_container = new Container ('user_session');
$ session_container-> last_login = date ('Y-m-d H: i: s');
$ session_container-> sess_token = trim (base64_encode (md5 (microtime ())), "=");
$ session = new Container ("user_session");
$ session-> getManager () -> getStorage () -> clear ('user_session');
Où user_session est le nom de la clé de tableau de session pour stocker les détails.
La solution publiée par @Crisp a fonctionné comme un charme Mais voici la solution alternative que j'ai trouvée 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 en clair ou en lecture, et le conteneur est l’une des entités gérées par le gestionnaire de session.
Cela peut aider les autres possessifs à créer des objets de chaque conteneur de session et à appeler la méthode clear.
Pour détruire toutes les sessions:
$session = new Container('base');
$session->getManager()->destroy();
or
utilisez la simple fonction php destroy:
session_destroy();
Cette fonction efface toutes les sessions.
J'espère que ça aide.