La sesión que configuré se pierde después de enviar el formulario.
Había creado la clase de sesión para configurar una nueva sesión, desactivarla, etc. En function.php de la plantilla de wordpress.
if (!session_id()) { session_start(); } include get_template_directory() . "/custom/session.php"; class session { function __construct() { } function set_flashdata($name, $value) { $_SESSION[$name] = $value; } function flashdata($name) { if (isset($_SESSION[$name])) { $str = $_SESSION[$name]; return $str; } else { return FALSE; } } function userdata($name) { if (isset($_SESSION[$name])) { return $_SESSION[$name]; } else { return FALSE; } } function set_userdata($name, $value) { $_SESSION[$name] = $value; } function unset_userdata($name) { if (isset($_SESSION[$name])) { unset($_SESSION[$name]); } } }Intento configurar la sesión como:
<?php $sess = new session(); $sess->set_userdata('sess_name',"some value"); ?> <form action="get_permalink(212);"> //input buttons </form>Después de enviar el formulario, va al enlace permanente (212). Entonces lo intenté.
<?php $sess = new session(); $value = $sess->userdata('sess_name'); var_dump($value); //returns false. That means session is lost after form submit. Why? ?>Tienes que llamar siempre a session_start() para cada solicitud .
La misión de session_start() es:
Eso significa que, si ha creado una sesión y no llama al método session_start(), la variable $_SESSION no se cumplirá.
Excepto : si en su php.ini ha establecido la opción session.auto_start en 1, entonces, en ese caso, no es necesario llamar a session_start() porque la variable $_SESSION se cumple implícitamente.
Debe mover el inicio/reanudación de la sesión al constructor de su sesión.
Al igual que:
class session { function __construct() { if (! session_id()) { session_start(); } } Otra cosa para mencionar, cada vez que haga una new Session obtendrá un objeto de la misma funcionalidad trabajando con la misma variable global $_SESSION .
No necesita más de un objeto $session , sería un buen momento para ver el Singleton pattern .
Debe usar la variable global de wordpress para la condición de que la sesión esté configurada o no, algo así como:
global $session; if (!session_id()) { session_start(); } include get_template_directory() . "/custom/session.php";