php - Cómo borrar un contenedor de sesión en Zend framework2
zend-framework2 zend-session (6)
Recientemente comencé a crear una aplicación utilizando Zendframework 2, tengo una buena experiencia en ZF1, el principal problema que enfrento aquí con ZF2 es con las sesiones.
Esta es la forma en que estoy creando un contenedor de sesión.
use Zend/Session/Container;
// Creación del contenedor de sesión: (anteriormente lo llamábamos como espacios de nombres)
$session_user = new Container(''user'');
$session_user_errors = new Container(''usererrors'');
$session_user_shares = new Container(''usershares'');
Ahora así tengo varios contenedores,
Podría borrar una clave de un contenedor en particular como este
// Obtener valor de la sesión por clave: (obtener valor del espacio de nombres)
$email = $session_user->offsetGet(''email'');
// Valor de configuración en sesión: (establecer valor desde el espacio de nombres)
$session_user->offsetSet(''username'', ''abcd'');
Ahora mi problema es limpiar un contenedor completo que está configurado en varios niveles de mi aplicación.
Si intento el siguiente código, está borrando todos mis contenedores de sesión.
$session_user = new Container(''user'');
$session_user->getManager()->getStorage()->clear();
Quiero borrar solo el contenedor llamado ''usuario'' que tiene muchas claves (no sé qué habrá al final). Hay una manera de lograr esto
Sé que puedo hacer offsetunset en cada tecla, pero esa no es una solución óptima que siento.
Por favor sugiera amablemente si existe alguna forma alternativa de borrar un contenedor de sesión en particular.
NOTA: - No estoy usando ninguno de los módulos de terceros como las sesiones de ZfcUser y Akrabat
Gracias de antemano por responder a esta publicación.
Casi lo tienes, solo necesitas pasar el espacio de nombres al método claro
$session_user->getManager()->getStorage()->clear(''user'');
Aún puede tratar la $ _SESSION como una matriz, así que lo siguiente también funciona
unset($_SESSION[''user'']);
En ZF2, para uso en Contenedores;
Crear contenedor:
$sessionTokenizer = new Container(''token'');
Establecer variable en contenedor
$token = $sessionTokenizer->token;
Destruir contenedor (SOLO CONTENEDOR)
$sessionTokenizer->offsetUnset();
La solución publicada por @Crisp funcionó como un hechizo Pero esta es la forma alternativa que encontré después de una investigación para resolver este problema.
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'']);
Creo que el administrador de sesiones es el que debemos usar para administrar las sesiones, ya sea para borrar o leer, y el contenedor es una de las entidades que administra el administrador de sesiones.
Esto puede ayudar a otros que son posesivos en crear objetos de cada contenedor de sesión y llamar al método claro.
Los siguientes son los detalles para Destruir la sesión en Zend Framework 2:
Usando la funcionalidad básica de PHP
session_start()
inicia la sesión.session_destroy()
elimina TODOS los datos almacenados en la matriz de la sesión.
Ahora usando la funcionalidad de Zend Framework:
Para una comprensión clara, primero, cree una sesión en Zend Framework y luego haga un proceso de eliminación.
- Sesión de creación
usar Zend / Session / Container;
$ session_container = new Container (''user_session'');
$ session_container-> last_login = date (''Ymd H: i: s'');
$ session_container-> sess_token = trim (base64_encode (md5 (microtime ())), "=");
- Eliminar sesion
$ session = new Container ("user_session");
$ session-> getManager () -> getStorage () -> clear (''user_session'');
Donde user_session es el nombre de la clave de matriz de sesión para almacenar los detalles.
Para destruir todas las sesiones:
$session = new Container(''base'');
$session->getManager()->destroy();
or
usar la función simple de destruir php:
session_destroy();
Esta función borra todas las sesiones.
Espero que esto ayude.
Puede borrar sesión como esta:
$ this-> session-> exchangeArray (array ());