Foros del Web » Programando para Internet » PHP »

PHP Pierde datos de session en una POPUP

Estas en el tema de PHP Pierde datos de session en una POPUP en el foro de PHP en Foros del Web. Hola Amigos, siempre he desarollado paginas web en php manejando sessiones para organizar mis datos, de usuarios y otros. esta vez estube haciendo algo distitnto ...
  #1 (permalink)  
Antiguo 10/08/2006, 09:53
Avatar de franleomg  
Fecha de Ingreso: mayo-2006
Ubicación: LIMA PERU
Mensajes: 75
Antigüedad: 17 años, 10 meses
Puntos: 0
Exclamación PHP Pierde datos de session en una POPUP

Hola Amigos, siempre he desarollado paginas web en php manejando sessiones para organizar mis datos, de usuarios y otros.

esta vez estube haciendo algo distitnto a los q haya echo antes, es sencilla pero la cosa es que de mi pagina hago un link a una ventana popup (ventana flotante) para mostar un cierto dato y no hacer una web entera y no va ser solo uno si no se mostarar esa ventana con datos de tegistros. pero me di cuenta algo. q al ser avierto la ventana flotante, y como en todos mis wev inlcuyo los header de control de seccion, bases de datos, etc. como en mis demas web q si funciona, pero aqui cuando valido la seccion no me reconoce los datos de session, es como si no inicio anteriormente mis secciones o como se se haya borrado los dotos.

eso pasa solo cuando habro la ventana flotante, y si la misma web muestro en una ventana q no es flotante normal funciona. pero lo que hago no nesecita de toda una web por tanto, he echo eso y no se si les haya pasado anteriomente este caso o es comun o algo sucede solo con mi codigo.
  #2 (permalink)  
Antiguo 10/08/2006, 11:06
 
Fecha de Ingreso: agosto-2006
Ubicación: Madrid
Mensajes: 95
Antigüedad: 17 años, 8 meses
Puntos: 0
Sí, por lo general PHP no puede gestionar la sesión si abres una ventana nueva con javascript (popup / window.open), pero la solución es muy sencilla: basta pasar de alguna forma el id de sesión a la nueva ventana, bien por cookies o por parámetro en la url, y luego iniciar sesión en la nueva ventana pasandole dicho id a session_start()

Sería algo así (no probado)
En la página que lanza el popup:
Código:
<a href="#" onclick="window.open('http://.......?idsesion=<?php echo session_id() ?>')">Nueva ventana</a>
En el popup, al principio de todo, antes de escribir cualquier texto:
Código:
<?php
   session_id($_GET["idsesion"]);
   session_start();
?>

Última edición por Nigel; 10/08/2006 a las 11:21
  #3 (permalink)  
Antiguo 10/08/2006, 11:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Nigel Ver Mensaje
Sí, por lo general PHP no puede gestionar la sesión si abres una ventana nueva con javascript (popup / window.open), pero la solución es muy sencilla: basta pasar de alguna forma el id de sesión a la nueva ventana, bien por cookies o por parámetro en la url, y luego iniciar sesión en la nueva ventana pasandole dicho id a session_start()

Sería algo así (no probado)
En la página que lanza el popup:
Código:
<a href="#" onclick="window.open('http://.......?idsesion=<?php echo session_id() ?>')">Nueva ventana</a>
En el popup, al principio de todo, antes de escribir cualquier texto:
Código:
<?php
   session_id($_GET["idsesion"]);
   session_start();
?>
mmm

PHP Puede propaga el SID (Identificador Único de sesión) por dos formas:
URL y cookies

Primero hay que confirmar que método usas .. lo más probable es que use propagación del SID en el URL:

session.use_trans_sid = ON

y/o a su vez session.use_cookies = ON (que indicaría propagación del SID en cookies) pero tu cookie no se está creando (por qué las bloquea tu navegador por ejemplo).

El el caso de que PHP esté re-escribiendo el URL para insertar el SID automáticamente en links y redireccionamientos . . lo hace en ciertos tag's HTML (que se indican en url_rewrite_tags = ..... de tu php.ini). Lo que no hace "automáticamente" es insertar el SID en redireccionamientos tipo javascript, ni header() de tipo "Location" .. ni en HTML como "META" de tipo frefresh ni en otros tantos.

Si vas a propagar el SID en el URL .. fuerzalo en configuración de PHP (ideal) y propagalo -a mano- en todos tus redireccionamientos, links, formularios .. etc. Haciendolo "a mano" no dependeras de configuración de PHP o tener casos "especiales".

El SID para propagarlo en el URL no puedes pasar sólo session_id() sino SID (que incluye: nombre sesión y sesion id) .. Para eso tienes la constante: SID

Código PHP:
<a href="#" onclick="window.open('http://.......?<?php SID ?>')">Nueva ventana</a>
Y en tu script PHP accedes a tu sesión en la forma normal ..

Código PHP:
<?
session_start
();
ehco $_SESSION['tuvariable'];
?>
No puedes definir el "ID" de sesión de una variable que propagas en el URL ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 10/08/2006, 14:05
Avatar de franleomg  
Fecha de Ingreso: mayo-2006
Ubicación: LIMA PERU
Mensajes: 75
Antigüedad: 17 años, 10 meses
Puntos: 0
Problema Solucionado Datos de Session en php

Amigos, el problema fue solucionado. Gracias a ustedes.

es correco la idea es propagar el SID y continuar usando en las ventanas que se desea. Gracias.
__________________
:: FRANLEOMG ::
Melgarejo Graciano M. Efraín
[email protected]
  #5 (permalink)  
Antiguo 10/08/2006, 17:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por franleomg Ver Mensaje
Amigos, el problema fue solucionado. Gracias a ustedes.

es correco la idea es propagar el SID y continuar usando en las ventanas que se desea. Gracias.
No sé si conoces tu configuraciòn de PHP .. en tu caso "parece" que estás propagando el SID en el URL (con opciòn que PHP inserte el SID automàticamente en ciertos casos) ..

Eso debes tenerlo claro:
1) Para "forzarlo" en tu aplicación (puedes usar ini_set() para tal fin)
2) Para saber las consecuencias que tiene propagar el SID en el URL sobre seguridad. Documento de lectura recomendada:
http://www.acros.si/papers/session_fixation.pdf

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 10/08/2006, 19:25
 
Fecha de Ingreso: agosto-2006
Ubicación: Madrid
Mensajes: 95
Antigüedad: 17 años, 8 meses
Puntos: 0
mmm... cierto, había olvidado la constante SID. Aunque creo que de todas formas no es necesaria, el nombre de las sesiones en PHP es opcional, y basta sólo con tener el id de sesión (por lo que he leido en el manual, corrigeme si me equivoco )
  #7 (permalink)  
Antiguo 11/08/2006, 10:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Nigel Ver Mensaje
mmm... cierto, había olvidado la constante SID. Aunque creo que de todas formas no es necesaria, el nombre de las sesiones en PHP es opcional, y basta sólo con tener el id de sesión (por lo que he leido en el manual, corrigeme si me equivoco )
Si, .. el nombre de la sesión es "opcional" .. PHP le otorga uno (PHPSESSIONID o algo así ..) si tu no lo indicas .. Pero, ... para "componer" un SID .. o usas la constante de mismo nombre que devuelve: nombre sesión=id sesión o lo compones tu con session_name() + session_id()

En muchos casos es necesario definir nombres de sesiones diferentes y no usar el que PHP dá por defecto .. sobre todo cuando se "replican" aplicaciones iguales en un mismo servidor virtual, por ejemplo tienes algo tipo:

La misma aplicación instalada tipo:
dominio.com/desarrollo_sitio
dominio.com/produccion_sitio

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 11/08/2006, 13:31
 
Fecha de Ingreso: agosto-2006
Ubicación: Madrid
Mensajes: 95
Antigüedad: 17 años, 8 meses
Puntos: 0
Ah, yo pensaba que el PHPSESSIONID era automático. Vaya, es interesante, entonces segun eso un mismo cliente puede tener varias sesiones distintas simultaneas, no? pues eso me va a resolver más de un problema
  #9 (permalink)  
Antiguo 11/08/2006, 17:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Siempre que de nombre definido sean diferentes y haciendo la analogía: nombre sesiòn -> contenedor variables sesión .. podrìsa tener várias sesiones completamente indepéndientes a la vez.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 15:45.