Foros del Web » Programando para Internet » PHP »

Guardar objeto somo session

Estas en el tema de Guardar objeto somo session en el foro de PHP en Foros del Web. Hola tengo una pregunta si yo tengo un objeto definido de una clase usuario y quiero mantener a ese objeto de la clase usuario toda ...
  #1 (permalink)  
Antiguo 11/02/2004, 13:12
Avatar de grovervas
Usuario no validado
 
Fecha de Ingreso: junio-2002
Ubicación: Perú
Mensajes: 306
Antigüedad: 21 años, 10 meses
Puntos: 0
Guardar objeto somo session

Hola tengo una pregunta si yo tengo un objeto definido de una clase usuario y quiero mantener a ese objeto de la clase usuario toda la aplicacion tengo que guaradarlo como una variable session com ohago conmis variables normales, entonces como accedo a los campos de ese objeto session, estube probando de la misma manera que los objetos pero no me funciona.

$user = new Mi_Usuario();
$user->obtener_datos();
session_start();
session_register("USUARIO");
$USUARIO = $user;
  #2 (permalink)  
Antiguo 11/02/2004, 13:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Según el manual oficial de PHP .. al propagar un objeto en una variable de sesión .. se pierden los métodos. Es decir .. aunque uses sesiones debes de hacer tu "include" a tu classe en las páginas que lo requieras e instanciar el objeto si no llega por la sesión.

También .. te recomendaría NOOO usar session_register() y menos el modo global que estás usando para acceder a tus variables de sesión . .eso es un gran problema para tu seguridad. Usa los arrays superglobales $_SESSION .. En este caso, el objeto en sí ha de serializarse (con serialize() .. )

Lee la documentación oficial de PHP al respecto:
http://www.php.net/manual/en/ref.session.php
http://www.php.net/manual/en/languag...ialization.php


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 11/02/2004, 14:39
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
De hecho y extendiendo lo que muy bien explicó Cluster, si de todas maneras para utilizar un objeto que grabaste en una sesión, tenés que asegurarte antes de incluir la definición de tu clase... entonces lo mejor para hacer y lo más usual, es lo siguiente :

Código PHP:
<?php
include(_dir_includes.'/clases/class.usuario.php');
$user =& new Usuario();
if(isset(
$_SESSION['id_usuario']))
{
    
$user->cargar($_SESSION['id_usuario']);
} else {
    
$user->obtener_datos();
    
$_SESSION['id_usuario'] = $user->obtenerId();
}
?>
DE esta manera, te aseguras de tener en tu Sesión la menor cantidad de datos posibles, y esto es muy importante ya que el Handler por defecto de sesiones es bastante inseguro.
Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #4 (permalink)  
Antiguo 11/02/2004, 15:55
Avatar de grovervas
Usuario no validado
 
Fecha de Ingreso: junio-2002
Ubicación: Perú
Mensajes: 306
Antigüedad: 21 años, 10 meses
Puntos: 0
Muchas gracias por sus opinion, en realidad ya tengo la funcionalidad de obtener los atributos del objeto pero no se pueden llamar a las funciones entonces de que manera puedo hacer de que por ejemplo yo ingreso con el usuario user el cual tiene sus datos en la bd el cual obtengo con un funcion de la clase y yo quiero seguir trabajando con ese usuario ya que en algun momento yo puedo modificar algunos de mis datos, yo entiendo de que puedo modificar los datos de otro usuario creando otra instancia de ese usuario.
  #5 (permalink)  
Antiguo 11/02/2004, 16:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
El comentario es que debes incluir tu classe (código) en el código que lo quieras usar .. en la sesión "viajarán" las variables que maneje ese objeto . .pero no los "metodos" (tus funciones de ese objeto) .. por eso hay que incluir dicho código también.

Código PHP:
<?
include("tuclasse.php");
if (isset(
$_SESSION['usuario'])){
    
$usuario=$_SESSION['usuario'];
} else {
    
$usuario=new instancia_tu_clase();
    
$_SESSION['usuario']=$usuario;
}

// usas tu $usuario->metodos ...
?>
Si está definida tu variable de sesión que contiene el objeto .. se asigna a $usuario .. y se continua con sus variables .. Los métodos los tienes en el código de la classe que debes incluir ya que se "pierden" ..

Si no está definida tu variable de sesión del objeto .. se instancia y se lleva a la sesión para que quede disponible en la próxima petición que se haga de una página de tu sitio ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 11/02/2004 a las 16:45
  #6 (permalink)  
Antiguo 11/02/2004, 17:57
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Tal como pone el manual en http://es2.php.net/manual/en/languag...ialization.php , basta con poner el include de la definicion ANTES del session_start(), en todas las paginas que usan sesiones.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 10/07/2010, 09:26
 
Fecha de Ingreso: octubre-2009
Mensajes: 45
Antigüedad: 14 años, 6 meses
Puntos: 3
Respuesta: Guardar objeto somo session

buscaba una respueta a mi problema y gracias aki la encontrado, tenia yo puesto
(error)
session_start();
include("clases/usuario.php");

y resulta que era así:

include("clases/usuario.php");
session_start();
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




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