Comportamiento extraño de Zend_Session usando Zend_Application

Les escribo para ver si alguno de ustedes se ha encontrado con este problema antes y tiene la oportunidad de entender por qué me pasó a mí.

Esta es la historia.

Desarrollé muchas aplicaciones ZF antes de Zend Framework v. 1.8, luego me detuve durante unos 18 meses. Ahora tenía que comenzar un nuevo proyecto en el que decidí usar Zend Framework nuevamente.

En mi servidor local tenía instalada la versión 1.11.3, por lo que no descargué la última versión.

Antes de usar Zend_Application con el archivo Bootstrap.php, solía iniciar sesiones colocando mis opciones de sesión en mi archivo config.ini y luego cargándolas en una instancia de Zend_Session como esta:

config.ini

sessions.name = NAME
sessions.use_only_cookies = 1
sessions.save_path = APPLICATION_PATH "/../tmp/sessions"
sessions.strict = on
sessions.remember_me_seconds = 1800

index.php (en el directorio del servidor web público) antes de iniciar la aplicación:

Globals::startSession();

clase personalizada Globals con varios métodos útiles:

    class Globals
    {
            static public function startSession()
            {
            $sessions_conf = self::getConfig()->sessions;
            Zend_Session::setOptions($sessions_conf->toArray(););
            Zend_Session::start();
            }
    }

Esto siempre ha funcionado muy bien, habilitando mis sesiones (utilizadas con Zend_Session_Namespace) y almacenando los archivos de sesión en save_path.

Con Zend_Application, el manual le indica que simplemente almacene las opciones de sesión en el archivo application.ini en la "sección" de recursos y Zend_Session se configurará automáticamente...

Lo hice así:

; SESSIONS
resources.session.name = NAME
resources.session.use_only_cookies = 1
resources.session.save_path = APPLICATION_PATH "/../tmp/sessions"
resources.session.strict = on
resources.session.remember_me_seconds = 1800

No funcionó. Así que traté de usar (¡no al mismo tiempo!) los métodos _initSession() y _initForceSession() en el archivo Bootstrap.php, colocándolos al comienzo de la clase y escribiendo en ellos el código:

$this->bootstrap('session');

Pero la sesión nunca funcionó, los datos no se almacenaron entre las solicitudes http y los archivos de sesión nunca se escribieron en save_path ...

¿Podría alguien, por favor, decirme si esto es un comportamiento normal (tal vez me he perdido algo en alguna parte...)?

Obviamente resolví el problema re-implementando mi antiguo método (y funciona perfectamente), pero me gustaría aprender a usarlo correctamente.

Gracias de antemano.

preguntado el 22 de mayo de 12 a las 16:05

¿podría publicar el código para su _initSession() y _initForceSession() (si es diferente)? -

No, el código es el mismo, solo hay una llamada a Zend_Session::start(); -

2 Respuestas

Este debería ser un caso de encenderlo y funciona, podría haberlo hecho fácil.

Creo que puede tener un problema con la forma en que configura sus opciones en su application.ini:

; SESSIONS
resources.session.name = NAME
resources.session.name.use_only_cookies = 1
resources.session.name.save_path = APPLICATION_PATH "/../tmp/sessions"
resources.session.name.strict = on
resources.session.name.remember_me_seconds = 1800

de acuerdo con la manual de referencia

Para establecer una opción de configuración de sesión, incluya el nombre base (la parte del nombre después de "sesión") como clave de una matriz que se pasa a Zend_Session::setOptions().

con sus opciones configuradas correctamente, el bootstrap _initSession() debería funcionar.

public function _initSession()
{
Zend_Session::start();
}

PD: uso Zend_Session_Namespace todo el tiempo, pero rara vez trato con una sesión global.

contestado el 23 de mayo de 12 a las 05:05

Gracias por tus sugerencias, lo intentaré mañana y te diré si podré hacerlo funcionar correctamente. - Alessandro

Nada que hacer, traté de usar un nombre base después de la sesión. part en mi application.ini y configuré la función _initSession() en mi Bootstrap.php, pero, como antes, no se almacena ningún archivo de sesión en save_path... Realmente no puedo entender por qué. - Alessandro

Hice una prueba ahora usando var_dump(Zend_Session::getOptions()); en mi _initSession() en el archivo Bootstrap.php y parece que ninguna de mis opciones ini se ha configurado... - Alessandro

Intenté insertar lo siguiente en la función de arranque __initSession(): - Alessandro

code public function _initSession() { //$this->bootstrap('session'); //Globales::startSession(); $opciones = Globals::getConfig()->recursos->sesión; Zend_Session::setOptions($opciones->toArray()); //var_dump(Zend_Session::getOptions()); //Salida(); Zend_Session::start(); }code las opciones se asignan a Zend_Session, pero no hay resultado... siempre no hay archivos en save_path. Es muy extraño, supongo... - Alessandro

En su Bootstrap.php agregue

public function _initSession()
{
Zend_Session::start();
}

las opciones de sesión se pueden configurar en application.ini

contestado el 22 de mayo de 12 a las 16:05

Usé _initSession() como me sugeriste, pero sin resultados, creo que falta algo, tal vez el usuario RockyFord tenga razón con sus sugerencias, intentaré mañana implementarlas. - Alessandro

Esta solución me da el mismo resultado que la de RockyFord, no se almacenan archivos de sesión en el save_path especificado... - Alessandro

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.