Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Objetos en $_SESSION

Estas en el tema de Objetos en $_SESSION en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola: hace un año supe hacer un sitio para un curso que basicamente era un catálogo de productos que podía elegir para poner en un ...
  #1 (permalink)  
Antiguo 20/05/2007, 04:43
 
Fecha de Ingreso: mayo-2007
Ubicación: Córdoba, Argentina
Mensajes: 56
Antigüedad: 17 años
Puntos: 1
Objetos en $_SESSION

Hola: hace un año supe hacer un sitio para un curso que basicamente era un catálogo de productos que podía elegir para poner en un carro de compras y realizar un proceso de compra. Este sitio lo hice con PHP 4.3.11 y ahora que lo probé con PHP 5 me genera un error cuando carga el objeto "carro" en una variable de sesión ($_SESSION).
¿Qué cambió de una versión a otra que no puedo encontrarlo en los documentos que tengo?
Gracias
Adrian
  #2 (permalink)  
Antiguo 20/05/2007, 08:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Objetos en $_SESSION

Todo depende de como estes manejando tu objeto, si posteas tu codigo, con mucho gusto te podemos ayudar.
  #3 (permalink)  
Antiguo 21/05/2007, 18:10
 
Fecha de Ingreso: mayo-2007
Ubicación: Córdoba, Argentina
Mensajes: 56
Antigüedad: 17 años
Puntos: 1
Re: Objetos en $_SESSION

Hola GatorV: te agradezco la deferencia de atender mis dudas. Acá vamos.

Estas son las líneas que solicitan la instancia del objeto Carro y guardarla en $_SESSION:

session_start();
if (isset($_SESSION["carro"])) {
$_SESSION["carro"]=new Carro;
}


La primera página aparece pero cuando quiero saltar a cualquier otra me aparece el siguiente mensaje en el momento que llama a un método del objeto:

Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Carro" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\AppServ\www\creacionesrocio\template\header.php on line 92

Viendo ésto le agregué estas líneas al inicio de la página principal para ver qué pasaba:

<? echo 'Sesion: '.session_id().'<br>';?>
<? echo 'Carro: '.$_SESSION["carro"].'<br>';?>


Cuando abre por primera vez me dice:
Sesion: 6063fc4b3f5d21e8039ca6b750b2dd7a
Carro: Object id #2


Y después al saltar a otra página me dice:
Sesion: 6063fc4b3f5d21e8039ca6b750b2dd7a
Carro: Object id #1


Por lo que intuyo que se me definen dos objetos pero sólo se instancia el segundo, ¿puede ser así?
Espero que me puedas dar una mano para solucionarlo. Desde ya muchas gracias por tu tiempo.

Un abrazo a la distancia

Adrian
  #4 (permalink)  
Antiguo 21/05/2007, 20:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Objetos en $_SESSION

Estas incluyendo la definicion de tu carro ANTES de iniciar la sesion?
Código PHP:
include("/path/to/carrito.php");
session_start();
$_SESSION["carro"]->algo(); 
  #5 (permalink)  
Antiguo 22/05/2007, 08:53
 
Fecha de Ingreso: mayo-2007
Ubicación: Córdoba, Argentina
Mensajes: 56
Antigüedad: 17 años
Puntos: 1
Re: Objetos en $_SESSION

Luego del inicio de la sesión incluyo el script donde está la definción de la clase "Carro" además de todos los métodos del mismo.

session_start();
include("/libreriadir/carro.php");
if (isset($_SESSION["carro"])) {
$_SESSION["carro"]=new Carro;
}
  #6 (permalink)  
Antiguo 22/05/2007, 09:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Objetos en $_SESSION

Tienes que incluirla ANTES, si no te va a tirar ese error.
  #7 (permalink)  
Antiguo 22/05/2007, 17:54
 
Fecha de Ingreso: mayo-2007
Ubicación: Córdoba, Argentina
Mensajes: 56
Antigüedad: 17 años
Puntos: 1
Re: Objetos en $_SESSION

Hola GatorV: hice lo que me dijiste pero ahora me aparece este mensaje:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\AppServ\www\creacionesrocio\libreria\conex.php: 43) in C:\AppServ\www\creacionesrocio\aplicacion.php on line 29

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\creacionesrocio\libreria\conex.php: 43) in C:\AppServ\www\creacionesrocio\aplicacion.php on line 29


(Sí, dos veces)

Me permite dar vueltas por las páginas pero en el momento que quiero ingresar al carro de compras me dice:

Notice: Undefined index: 7 in C:\AppServ\www\creacionesrocio\libreria\carro.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\creacionesrocio\libreria\conex.php: 43) in C:\AppServ\www\creacionesrocio\shoping\agregar_car rito.php on line 10


Espero tu respuesta
  #8 (permalink)  
Antiguo 22/05/2007, 17:59
 
Fecha de Ingreso: mayo-2007
Ubicación: Córdoba, Argentina
Mensajes: 56
Antigüedad: 17 años
Puntos: 1
Re: Objetos en $_SESSION

En el mensaje anterior olvide despedirme. Te mando un abrazo.

Adrian
  #9 (permalink)  
Antiguo 22/05/2007, 19:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Objetos en $_SESSION

El primer error te dice que en tu archivo de conex.php estas enviando ya una salida por lo que no puede iniciar la sesion.

El segundo error te dice que en tu archivo de carro.php tienes un problema en la linea 18.
  #10 (permalink)  
Antiguo 23/05/2007, 15:18
 
Fecha de Ingreso: mayo-2007
Ubicación: Córdoba, Argentina
Mensajes: 56
Antigüedad: 17 años
Puntos: 1
Re: Objetos en $_SESSION

En realidad el primer mensaje tiene que ver con que no

puede resolver algún tema con el inicio de sesión que

está justamente en la línea 32 del archivo aplicacion.php

(la línea 43 de conex.php es el final del script de php).

Este probema se soluciona cuando pongo la sentencia

session_start() al inicio del script de definiciones.

El segundo mensaje tiene que ver que no puede resolver el

índice que le paso para que actualice una propiedad del

objeto "carro".

Sigo diciendo que existe un problema cuando se instancia

el objeto "carro" y se lo guarda en la variable de

sesión, pero no sé cuál es. Hubo un cambio desde el PHP4

al PHP5 que ya me da este error que en la versión

anterior no estaba.

Un abrazo.

Adrian

PD: Despues de solucionar este problema te pregunto por

otro con los header (Location).
  #11 (permalink)  
Antiguo 23/05/2007, 15:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Objetos en $_SESSION

La unica diferencia es que existe una funcion magica que se llama __autoload:

Código PHP:
function __autoload$classname ); 
Puedes definir esa funcion para que se pueda construir el objeto:
Código PHP:
function __autoload$classname ) {
     require_once( 
'libs/' $classname );

  #12 (permalink)  
Antiguo 27/05/2007, 04:24
 
Fecha de Ingreso: mayo-2007
Ubicación: Córdoba, Argentina
Mensajes: 56
Antigüedad: 17 años
Puntos: 1
Re: Objetos en $_SESSION

GatorV: te agradezco la atención pero sigo teniendo el mismo problema.

Atte

Adrian
  #13 (permalink)  
Antiguo 27/05/2007, 12:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Objetos en $_SESSION

Como te habia comentado, necesitas checar tu archivo conex.php para poder incluirlo antes de enviar el session_start();

Es por regla que para almacenar objetos en sesiones debes de incluir la definicion antes del session_start();
  #14 (permalink)  
Antiguo 10/06/2007, 06:01
 
Fecha de Ingreso: mayo-2007
Ubicación: Córdoba, Argentina
Mensajes: 56
Antigüedad: 17 años
Puntos: 1
Re: Objetos en $_SESSION

Perdón por la demora en responder pero tuve un problema con la línea telefónica.

Mirá, probé lo que me dijiste pero sigo sin poder usar el objeto. Además que me genera dos objetos.

Agradezco tu atención-

Adrian
  #15 (permalink)  
Antiguo 10/06/2007, 09:11
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Objetos en $_SESSION

Cita:
Iniciado por GatorV Ver Mensaje
Es por regla que para almacenar objetos en sesiones debes de incluir la definicion antes del session_start();
Para extender un poco la respuesta. Cuando se ejecuta session_start() PHP des-serializa todos los objetos guardados en la sesión sin necesidad de llamar a unserialize(). De la misma forma, si tenes objetos guardados en la sesión PHP serializara a todos estos objetos automaticamente al final de la ejecución del script sin necesidad de llamar a serialize(). Como se puede leer, si un objeto se des-serializa y la definición de la clase no está presente este se vuelve inútil ya que pierde la asociación con la clase y por ende los métodos. Para resumir todo lo anterior, si guardas algún objeto en la sesión debes incluir la definición de la clase antes de llamar a session_start().

Saludos.
  #16 (permalink)  
Antiguo 05/07/2007, 02:58
 
Fecha de Ingreso: mayo-2007
Ubicación: Córdoba, Argentina
Mensajes: 56
Antigüedad: 17 años
Puntos: 1
Re: Objetos en $_SESSION

Gracias Darío y disculpa la demora en responder.
Aqui te mando el archivo aplicacion que entre otras cosas define parametros de configuración, abre la sesión cargando en ella el carro (donde está el problema) y el array de productos y conecta con la base de datos; además de incluir un par de archivos).
Código:
<? /*APLICACION.PHP*/

error_reporting(15);

class Objeto{};

$CFG=new Objeto;

$CFG->dbhost="localhost";
$CFG->dbuser="alumno3";
$CFG->dbpass="alumno";
$CFG->dbnombre="crocio";
$CFG->wwwroot="/creacionesrocio";
$CFG->dirroot="C:/AppServ/www/creacionesrocio";
$CFG->templatedir="$CFG->dirroot/template";
$CFG->libdir="$CFG->dirroot/libreria";
$CFG->imagedir="$CFG->dirroot/imagen";
$CFG->icondir="$CFG->dirroot/icon";

$DB_DEBUG=true;
$DB_EXIT_FALLA=true;

include("$CFG->libdir/lib.php");
include("$CFG->libdir/conex.php");
include("$CFG->libdir/e-shop.php");
include("$CFG->libdir/carro.php");

$ME=pag_actual();

session_start();
//session_register("SESSION");

if (!isset($_SESSION)) {
	$_SESSION=array();
}

if (!isset($_SESSION["carro"])) {
	$_SESSION["carro"]=new Carro;
}

if (!isset($_SESSION["prod"])) {
	$_SESSION["prod"]=new Objeto;
}



$link = conectarse($CFG->dbhost,$CFG->dbuser,$CFG->dbpass,$CFG->dbnombre);


?>
Yo le puse un echo $_SESSION["carro"] luego de llamar a este archivo en cada página principal y me aparece el mensaje "Object id#2" con lo que me dice que genera 2 objetos siendo que yo pido uno solo y ahí es donde no se porque me hace eso.

Te mando un abrazo y nuevamente pido disculpas por la demora. Atte

Adrian
  #17 (permalink)  
Antiguo 12/08/2007, 14:02
 
Fecha de Ingreso: agosto-2007
Mensajes: 2
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Objetos en $_SESSION

Hola, quizas si pudieras pasarme todos los script te puedo dar una mano, al menos pasame...
lib.php, base.php, e-shop.php, carro.php

creo que en mis comienzos tuve en mano el mismo cursito pero no lo encuentro para probarlo con php 5...
mi cuenta de email es [email protected] por si puedes enviar el codigo asi lo veo...
Saludos.-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 18:00.