Saltar al contenido

Sesión PHP con un objeto incompleto

Solución:

Falta el serialize / unserialize de su clase de plantilla.

Eche un vistazo aquí para ver un ejemplo práctico que di sobre otra pregunta suya.

Por ejemplo, probablemente quieras esto:

<?php
  $_SESSION['template'] = serialize($template);
?>

y

<?php
  $template = unserialize($_SESSION['template']);
?>

Editar:

leer su comentario sobre moverlo a la parte superior da una pista.

La serialización / unserialización automática ocurre cuando llama session_start().
Eso significa el orden en el que incluye sus archivos y llama al session_start() es muy importante.

Por ejemplo:

Esto estaría mal:

<?php
session_start();
include 'inc/template.class.php';
?>

Si bien esto sería correcto:

<?php
include 'inc/template.class.php';
session_start();
?>

Ahora, veo en su ejemplo que está en el orden CORRECTO, pero también noto que hace muchas otras inclusiones antes de incluir template.class.php

¿Sería posible que uno de esos incluye (tal vez prep.php o header.class.php) llame start_session() ¿también?
Si es así, ese era tu problema (session_start() siendo llamado antes de su template.class.php).

Cuando usted session_start() en php $_SESSION La matriz se llena con los objetos correspondientes. Esto significa que todas las interfaces deben estar disponibles (requeridas). Si la sesión ya ha sido iniciada previamente por otro script (por ejemplo, marco) que no tenía visibilidad en las interfaces, los objetos en $ _SESSION estará incompleto, y hazlo de nuevo session_start() es inútil porque la sesión ya se ha iniciado. Una posible solución es utilizar el método session_write_close(), luego session_start() que comienza de nuevo poblar $_SESSION, pero con visibilidad en la interfaz, por lo que su objeto en $_SESSION será bueno.

He publicado mi respuesta a una pregunta similar, volviéndola a publicar porque también responde a esta.

PHP serializa sus sesiones usando el incorporado serialize y unserialize métodos. serialize de PHP tiene la capacidad de serializar objetos PHP (también conocidos como instancias de clase) y convertirlos en cadenas. Cuando usted unserialize esas cadenas, las convierte de nuevo en esas mismas clases con esos valores. Las clases que tienen algunas propiedades privadas y quieren codificar / decodificar eso o hacer algo complejo en su serialización / deserialización implementan la Serializable clase y agregar serialize y unserialize métodos a la clase.

Cuando PHP unserialize intenta anular la serialización de un objeto de clase, pero el nombre de la clase no es declarado / obligatorio, en lugar de dar una advertencia o lanzar un Exception, lo convierte en un objeto de __PHP_Incomplete_Class.

Si no desea que sus objetos de sesión se conviertan a __PHP_Incomplete_Class, Puede hacerlo solicitando los archivos de clase antes de invocar session_starto registrando una función de carga automática.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *