Foros del Web » Programando para Internet » PHP »

Problema con cookies y sesiones!!

Estas en el tema de Problema con cookies y sesiones!! en el foro de PHP en Foros del Web. Me pasa una cosa muy rara y a ver si alguien puede ayudarme... Tengo una web y en el mismo dominio en una subcarpeta tengo ...
  #1 (permalink)  
Antiguo 18/01/2005, 20:01
 
Fecha de Ingreso: enero-2005
Mensajes: 65
Antigüedad: 19 años, 3 meses
Puntos: 0
Problema con cookies y sesiones!!

Me pasa una cosa muy rara y a ver si alguien puede ayudarme...

Tengo una web y en el mismo dominio en una subcarpeta tengo el modulo administrativo desde donde se actualizan todos los datos de la web. Algo asi:
WEB: www.dominio.com
MODULO ADMINISTRATIVO: www.dominio.com/admin/

La cuestion es que entro en el modulo administrativo y hago cosillas, de momento todo funciona perfecto. Ahora abro la pagina web para ver si ma hecho bien las modificaciones/inserciones/borrados. Veo que todo es correcto y vuelvo al modulo administrativo para continuar actualizando. De repente veo que las variables de sesion que tenia han desaparecido!!!!Mi sesion se ha vuelto loca, he perdido todas las variables que tenia y ahora no me funcionan bien ni las nuevas (y eso que en el codigo php elimina las variables de sesion y las vuelvo a crear al entrar en la primera pagina del modulo, pues a partir de ahora ya no me las crea!!)!!!Entonces borro las cookies y todo vuelve a funcionar perfecto hasta que no vuelva a interactuar con la web!!Es como si la sesion me fuera machacada al entrar en la web o se volviera loca!!Xq???

He probado de assignar yo un session_id() en los dos index.php para que usen la misma sesion, y tampoco va!!!Que puedo hacer??

Muxas gracias,

P.D:lo mas weno es que en localhost me funciona todo muy bien haga lo que haga!!

Última edición por Pitu.; 18/01/2005 a las 20:13
  #2 (permalink)  
Antiguo 19/01/2005, 07:16
 
Fecha de Ingreso: enero-2005
Mensajes: 65
Antigüedad: 19 años, 3 meses
Puntos: 0
Nadie sabe como solucionar esto... mi servidor es LYCOS...
  #3 (permalink)  
Antiguo 19/01/2005, 08:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ten presente que el uso de sesiones o cookies trabaja con cabeceras HTTP .. cabeceras que se envian antes que tu "HTML" que puedas tener en tus páginas de salida .. pero, en "Lycos" y muchos servicios de hosting "gratuitos" insertan publicidad de una forma u otra que al fin y al cabo se origina antes incluso de tus própias cabeceras HTTP que puedan enviar tus scripts PHP .. así que por ahí podría estar parte del problema.

Un saludo,
  #4 (permalink)  
Antiguo 19/01/2005, 08:39
 
Fecha de Ingreso: enero-2005
Mensajes: 65
Antigüedad: 19 años, 3 meses
Puntos: 0
ok Cluster, y que debo hacer??No puedo hacer nada para arreglar esto??Si le paso la sesion por la direccion funcionaria??

Yo uso Lycos xo no es gratuito, me hospedan alli xo tengo direccion propia y pago por sus servicios!!!

He visto una funcion de sesion en el foro que no se si me servira. session_use_cookies = off;
Si lo pongo en off me obliga a pasar la sesion por cabecera (direccion web, GET),no??si es asi me pueden poner un ejemplo de como hacerlo??osea que un fichero le pase a otro el sesion. Por ejemplo del index.php que seria la primera pagina que se abre al entrar en mi web i, hola.php, que supongamos que es la unica pagina a la que puedo ir desde el index.

Muxisimas gracias por todo!

Última edición por Pitu.; 19/01/2005 a las 08:48
  #5 (permalink)  
Antiguo 19/01/2005, 10:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Yo uso Lycos xo no es gratuito, me hospedan alli xo tengo direccion propia y pago por sus servicios!!!
Ok, .. en ese caso indica el código que usas (referente a las sesiones: como las defines y como pretendes leerlas)

Y también algo de configuración de sesiones de "Lycos" para ver como las trabaja a nivel de configuración.

Sobre el tema de la propación del SID en el URL .. fijate en la documentación oficial de sesiones de PHP:
www.php.net/session

Puedes usar SID como constante que es en tus Links .. donde tendrías que añadirla a todos ellos (link's y redireccionamientos en cuestión).

Un saludo,
  #6 (permalink)  
Antiguo 19/01/2005, 18:59
 
Fecha de Ingreso: enero-2005
Mensajes: 65
Antigüedad: 19 años, 3 meses
Puntos: 0
la informacion de las sesiones de Lycos la he solicitado via mail ya que no lo explica en ningun lado de la pagina.

Respecto al link que mas puesto de las sesiones, sq no domino muxo ingles xo a ver si lo digo bien:
- Yo en index.php pillo el ID de la sesion mediante sesion.id() y a partir de aqui le voy pasando pagina por pagina en la direccion (x.ej. pagina.php?ID=$sid). Xo yo que sepa esto es pasar una variable por metodo GET. Se pueden pasar variables por GET y POST a la vez??desde el mismo archivo a otro??
- Y si paso el SID por URL, no puedo usar el boton de atras del explorer xq no sabria que vale el SID ya que no lo recibe,no?o si que lo recibe xq lo pone tb en la URL anterior?
- Tambien debo poner session.use_trans_sid=ON y session.use_cookies=OFF?
Seria asi??

Y el hecho que me pase el id de la sesion mediante la URL me solucionara el problema??
El hecho de pasarlo por URL hace que la sesion no tenga nada que ver con las cookies (xq eso es lo que quiero)!!

Lo siento por hacerte tantas preguntas xo sq esto lo veo importante y no me aclaro mucho...
Muxas gracias por tu ayuda y me tienes disponible para cualquier pregunta que quieras e intentare ayudarte!!!En serio, muxas gracias

Última edición por Pitu.; 19/01/2005 a las 19:13
  #7 (permalink)  
Antiguo 20/01/2005, 05:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La configuración de tu servidor la puedes ver tu mismo haciendo:
Código PHP:
<?
phpinfo
();
?>
(supongo que te permitiran ejecutar dicha función ..)

Cita:
- Yo en index.php pillo el ID de la sesion mediante sesion.id() y a partir de aqui le voy pasando pagina por pagina en la direccion (x.ej. pagina.php?ID=$sid). Xo yo que sepa esto es pasar una variable por metodo GET. Se pueden pasar variables por GET y POST a la vez??desde el mismo archivo a otro??
El SID es una constante ... y se compone de dos partes "el nombre de la sesión" y el identificador de la sesión .. ambos los puedes obtener con las funciones:

$sid=session_name()."=".session_id();

Pero como te comento .. eso ya es una constante que puedes usar tipo:
<a href="pagina.php?".SID>pagina</a>

Cita:
Tambien debo poner session.use_trans_sid=ON y session.use_cookies=OFF?
Seria asi??
Esto en principio se hace en el php.ini (cosa que no vas a poder modificar por usar un servicio de hosting). A lo sumo vía la función ini_set() se puede "forzar" esa configuración .. pero primero hay que ver la configuración que actualmente usa PHP en tu caso.

Cita:
Y el hecho que me pase el id de la sesion mediante la URL me solucionara el problema??
El hecho de pasarlo por URL hace que la sesion no tenga nada que ver con las cookies (xq eso es lo que quiero)!!
No te va a solventar el problema .. entre otras cosas por qué tampoco indicas el código que usas .. pero si es ques una parte más de tus pruebas para descartar problemas con otras cosas como "cookies" si es que llegas a propagar el SID en cookies y tal vez tu navegador no las acepta o un proxy o firewall pueda estar bloqueandola.

La propagación del SID por el URL hace más insegura tu aplicación .. por cookies es más seguro. Lee las FAQ's de este foro .. hay un par que tratan y explican que son las sesiones y todo esto del "SID" y su propagación. No tiene nada que ver que se "propague" el SID en el cookies con los datos en sí de tus "sesiones" .. los datos de tus sesiones siguen estando en tu servidor no en el cliente (navegador/PC del usuario) sólo queda en el "cliente" el SID que es lo que relaciona a tu sesión en el servidor con el cliente que la pide o usa.

Un saludo,
  #8 (permalink)  
Antiguo 20/01/2005, 15:02
 
Fecha de Ingreso: enero-2005
Mensajes: 65
Antigüedad: 19 años, 3 meses
Puntos: 0
Cita:
Iniciado por Cluster
La configuración de tu servidor la puedes ver tu mismo haciendo:
Código PHP:
<?
phpinfo
();
?>
(supongo que te permitiran ejecutar dicha función ..)
Si que me ha dejado:
Directive / Local Value / Master Value
session.auto_start / Off / Off
session.bug_compat_42 / On / On
session.bug_compat_warn / On / On
session.cache_expire / 180 / 180
session.cache_limiter / nocache / nocache
session.cookie_domain / no value / no value
session.cookie_lifetime / 3600 / 3600
session.cookie_path / no value / no value
session.cookie_secure / Off / Off
session.entropy_file / "/dev/urandom" / "/dev/urandom"
session.entropy_length / 16 / 16
session.gc_divisor / 100 / 100
session.gc_maxlifetime / 1200 / 1200
session.gc_probability / 0 / 0
session.name / PHPSESSID / PHPSESSID
session.referer_check / no value / no value
session.save_handler / files / files
session.save_path / "2;/data/session" / "2;/data/session"
session.serialize_handler / php / php
session.use_cookies / On / On
session.use_only_cookies / Off / Off
session.use_trans_sid / Off / Off

Aqui estan todos los valores referentes a las session que me pone!
Como puedes ver tengo session.use_cookies=ON y session.use_trans_sid=OFF, que me aconsejas que haga???

Como codigo uso principalmente las sesiones asi (soy un poco novato con ellas):
index.php
<?php
//session_name("garciauto");
//session_id("garciauto");
session_start();
if(isSet($_SESSION["ok"])){
echo "<center><b>Login o password incorrectes! </b></center>";
}
?>
(...)

insertar.php
<?php
session_start();
//header("Cache-control: private");
if((!(isSet($_SESSION["yes"])))||($_SESSION["yes"]!=1)){
echo "<script language='javascript'>location.href='index.php'</script> ";
}else{
unset($_SESSION['marca']);
unset($_SESSION['modelo']);
unset($_SESSION['matri']);
(...)
}
?>

insertar2.php
<?php
session_start();
if((!(isSet($_SESSION["yes"])))||($_SESSION["yes"]!=1)){
echo "<script language='javascript'>location.href='index.php'</script> ";
}else{
$marca=$HTTP_POST_VARS['marca'];
$modelo=$HTTP_POST_VARS['modelo'];
(...)
$_SESSION["marca"]=$marca;
$_SESSION["modelo"]=$modelo;
(...)
?>

Esto es lo primero del index.php, insertar.php y insertar2.php!!He probado session_name, session_id pero no funcionaban del todo bien. Tb me puse header("Cache-control: private"); que lei que arreglaba no se que de IE 6.

Para eliminar variables de sesion uso unset($_SESSION['marca']); No puedo destruir la sesion entera ni todas sus variables a la vez xq en cada pagina tengo que comprovar que $_SESSION['yes'] valga 1, variable que creo si se han loggeado correctamente. Debido a esto elimino las variables de sesion usadas durante una operacion, al principio (x.ej. en insertar tengo 3 paginas antes que se inserte del todo, pues las elimino en la primera pagina del formulario (insertar.php). Me introducen los datos y estas variables vuelven a ser creadas con los nuevos valores (insertar2.php)). Asi lo hago con todo(borrar, modificar...).

No uso session_register() xq leí que si usas $_SESSION no hace falta. Espero a ver que me comentas de lo puesto.
Mil gracias otra vez!!!!!

Última edición por Pitu.; 20/01/2005 a las 15:07
  #9 (permalink)  
Antiguo 21/01/2005, 05:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Aqui estan todos los valores referentes a las session que me pone!
Como puedes ver tengo session.use_cookies=ON y session.use_trans_sid=OFF, que me aconsejas que haga???
En ese caso .. la configuración de PHP va a propagar el SID en cookies, esto requerirá que tu navegador acepte dichas cookies. Como en anteriores mensajes te he comentado .. este método de propagación del SID es el más seguro y cómodo por tu parte (programación) de implementar y usar.

Cita:
Como codigo uso principalmente las sesiones asi (soy un poco novato con ellas):
Bueno .. nadie nace sabiendo ... Pero por eso te he insistido muchas veces que primero hay que leer la teoría sobre sesiones para ver como funcionan estas .. de ahí podras detectar muchos errores o ver que configuración afecta a como van a funcionar .... (en las FAQ's de este foro tienes explicaciones .. y por supuesto en la documentación oficial de PHP. También si usas el buscador de este foro veras muchoooos mensajes que por mi parte he comentado el tema de sesiones)

Sobre tu código en concreto ..

** No sé cual es el procedimento que usas para ejecutar tus scripts .. sólo veo que en un sitio dices $_SESSION['ok'] que validas si existe .. pero no se vé donde la defines con algún valor .. por otro lado usas ['yes'] .. en fin . .mucho lio.

** Los redireccionamientos que haces en javascript puedes y deberias hacerlos en PHP tipo:

header("Location: pagina.tal");
exit;

** Si usas los arrays superglobales en $_SESSION para el uso de sesiones .. usalo también para el uso de tus variables que llegan por "POST" .. es decir .. en lugar de $HTTP_POST_VARS .. usa $_POST ..

** No es necesario que uses una variable tipo "flag" (bandera, estado) como ese "yes" .. si ya trabajas con otras varaibles como esa "marca" .. "modelo" .. etc .. Basate en la existencia de una de esas variables que ya usas .. no es necesario usar otras auxiliares.


Un saludo,
  #10 (permalink)  
Antiguo 21/01/2005, 07:26
 
Fecha de Ingreso: enero-2005
Mensajes: 65
Antigüedad: 19 años, 3 meses
Puntos: 0
Cita:
Iniciado por Cluster
Bueno .. nadie nace sabiendo ... Pero por eso te he insistido muchas veces que primero hay que leer la teoría sobre sesiones para ver como funcionan estas .. de ahí podras detectar muchos errores o ver que configuración afecta a como van a funcionar .... (en las FAQ's de este foro tienes explicaciones .. y por supuesto en la documentación oficial de PHP. También si usas el buscador de este foro veras muchoooos mensajes que por mi parte he comentado el tema de sesiones)
Si si, me los he mirado!!Hasta me maté ha hacer un word de casi todas las preguntas y lo he imprimido!!45 paginas!!

Cita:
Iniciado por Cluster
** No sé cual es el procedimento que usas para ejecutar tus scripts .. sólo veo que en un sitio dices $_SESSION['ok'] que validas si existe .. pero no se vé donde la defines con algún valor .. por otro lado usas ['yes'] .. en fin . .mucho lio.
A ver, sq tal vez me he explicado mal... $_SESSION['ok] la pongo a $_SESSION["ok"]=1 una vez el usuario ha insertado algun login y password, en autentifica.php. Si el login y pass son incorrectos le redirecciono a index.php otra vez donde mira si $_SESION['ok'] existe y si es asi te saca por pantalla Login y pass incorrectos.

En este mismo autentifica.php si login y pass son correctos creo $_SESSION["yes"]=1 y header("LOCATION: ok.php"). ok.php es el menu de la administracion desde donde puedo ir a los diferentes formularios y donde en cada archivo de los fomularios compruebo si $_SESSION['yes'] existe y vale 1, para que poniendo la direccion en el navegador no pueda nadie acceder a ok.php sin loggearse correctamente primero.

Para sacar las variables de sesion por pantalla lo hago asi:
<tr><td width="30%" height="22"><p align="right"><b>Matriculación:
</b></p></td><td><? echo $_SESSION["matrimes"]." / ".$_SESSION["matri"]; ?></td></tr>

Uso variables de sesion para que el usuario pueda volver atras con el boton navegador y algunas variables no pierdan su valor. Ya que el procedimiento que uso en los formularios es el siguiente, en modificar por ejemplo, primero le sale la ficha del coche con los datos que estan insertados actualmente en la BBDD y un formulario para que diga que campo desea modificar. En modificar2.php le sale el valor actual del campo que ha seleccionado y el textfield para que introduzca el nuevo valor. En modificar3.php le sale la ficha antigua y la ficha nueva (como quedaria) y si clika en ACEPTAR le lelva a modificar4.php que hace las modificaciones en la BBDD y me redirecciona al menu principal.

Cita:
Iniciado por Cluster
** Los redireccionamientos que haces en javascript puedes y deberias hacerlos en PHP tipo:
header("Location: pagina.tal");
exit;
Ya, xo puedo sacar la alerta primero antes del header???
echo "<script language='javascript'>window.alert('Introduzca todos los datos obligatorios')</script>";
header("Location: pagina.tal");
exit; --> esto no funciona y de hecho he leido que el header tiene que estar antes que cualquier salida por pantalla, no??

Cita:
Iniciado por Cluster
** Si usas los arrays superglobales en $_SESSION para el uso de sesiones .. usalo también para el uso de tus variables que llegan por "POST" .. es decir .. en lugar de $HTTP_POST_VARS .. usa $_POST ..
ok, ahora mismo lo hago! Xo en las fotos tb seria $_FILES['foto']['nombre'], verdad??

Cita:
Iniciado por Cluster
** No es necesario que uses una variable tipo "flag" (bandera, estado) como ese "yes" .. si ya trabajas con otras varaibles como esa "marca" .. "modelo" .. etc .. Basate en la existencia de una de esas variables que ya usas .. no es necesario usar otras auxiliares.
Si, xq "marca" y "modelo", se crean en estos formularios segun lo que introduzca el usuario. Es decir, en ok.php no esta ni creada xo a la que voy entrando en los formularios va cambiando de valor.

Si uso esto:
ini_set("session.use_cookies","0");//descativamos el uso de cookies para nuestras sessions
ini_set("session.use_trans_sid","1");//activamos el uso de la url para enviar el SID de nuestra session
y propago el SID por URL, es probable que ya no tenga el problema este con las cookies??mi problema, no se si te acuerdas, se arreglaba borrando cookies siempre que entre en el modulo administrativo!!


Weno, ahora pruebo un par de cosas mas y me sigo peleando con ello!!
Muxisimas gracias,

Última edición por Pitu.; 21/01/2005 a las 09:19
  #11 (permalink)  
Antiguo 21/01/2005, 18:57
 
Fecha de Ingreso: enero-2005
Mensajes: 65
Antigüedad: 19 años, 3 meses
Puntos: 0
upppppppppppppppppppppppppppppppppppppppppp
  #12 (permalink)  
Antiguo 23/01/2005, 13: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:
Ya, xo puedo sacar la alerta primero antes del header???
echo "<script language='javascript'>window.alert('Introduzca todos los datos obligatorios')</script>";
header("Location: pagina.tal");
exit; --> esto no funciona y de hecho he leido que el header tiene que estar antes que cualquier salida por pantalla, no??
Tienes que cambiar tu "filosofìa" de como entiendes "PHP" .. los mensajes de error debes presentarlos en la página que llegas al redireccionar .. no en el script PHP de proceso en si.

Para eso .. a la pàgina que redireccionas le pasas por ejemplo por una variable de sesión po por el URL tu "còdigo de error" para que puedas hacer cosas tipo:

Código PHP:
if (se origina un error){
header ("Location: pagina_que_redireccionamos.php?error=1");
exit;

y en "pagina_que_redireccionamos.php" controlas si "llega un error" tipo:

Código PHP:
if (isset($_GET['error'])){
echo 
"Ocurrió el error còdigo: ".$_GET['error']";

Ademàs .. si usas ese "alert" tuyo de javascript en la pàgina que redirecionas al final de la misma .. veras como no ves una pàgina en "blanco" con tu "alert" ahi y cuando pulsan el botòn de "aceptar" de ese alert() de javascript redirecciona a tu página sino que veras tu página completa ya "redireccionada" y tu alert() ahí a la espera .. "visualmente" para el usuario màs agradable que ver una "pagina en blanco" por unos instantes.

Por ende .. este "script" de proceso que va a validar tus sesiones y en función de todo esa lógica va a redireccionar .. no tiene sentido que en ella exista NADA de HTML .. ni <html> .. ni nada .. recuerda que el objetivo de este "proceso" es determinar "qué" página se va a redireccionar en caso de error .. o bien quedarse en esta misma .. asì que estas validaciones tendrán que estar al principio de tu´script .. pues será tu lógica (if y demás) quien decida que se va hacer.

Cita:
ini_set("session.use_cookies","0");//descativamos el uso de cookies para nuestras sessions
ini_set("session.use_trans_sid","1");//activamos el uso de la url para enviar el SID de nuestra session
y propago el SID por URL, es probable que ya no tenga el problema este con las cookies??mi problema, no se si te acuerdas, se arreglaba borrando cookies siempre que entre en el modulo administrativo!!
Si haces eso .. debes conocer que PHP va a re-escribir ciertos tags HTML como los links, formularios y algunos màs para "insertar" automàticamente el SID en esos redireccionamientos. Lo que no va hacer es insertar el SID ni en redireccionamientos javascript (como los que tu haces) .. ni en Header("Location: ...") (como te recomiendo su uso) .. así que almenos en estos mètodos deberas hacerlos tu manualmente, sino igualmente "perderas" el SID por el camnio y con ello tus variables de sesiòn.

Por otro lado te recomendarìa estudiar y probar mi script "Autentificator" (con fines didacticos) para que veas como trabajar con la autentificaciòn de una forma sencilla y sin tantos lios como haces con tus "ok" .. el "yes" y demàs lios que haces, ademàs que para que veas como usar "header()"

http://php.cluster-web.com/autentificator

Un saludo,
  #13 (permalink)  
Antiguo 26/01/2005, 12:40
 
Fecha de Ingreso: enero-2005
Mensajes: 65
Antigüedad: 19 años, 3 meses
Puntos: 0
Muxisimas gracias por todo, y lo siente si te he agobiado muxo. El tener que aprender por tu cuenta a veces hace que no cojas bien el concepto!!

Me mirare a fondo tu autentificador y a ver que si aprendo como se hace bien hecho!!

Por cierto, amunt Valencia i no saps quin fred que fa aquests dies!!Salutacions!!;) ;)
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 02:52.