Foros del Web » Programando para Internet » PHP »

sesiones

Estas en el tema de sesiones en el foro de PHP en Foros del Web. Hola a tod@s Como siempre, me he estancado en una "tonteria" de esas de los novatos. De todos modos, veo que en PHP lo de ...
  #1 (permalink)  
Antiguo 04/09/2009, 03:53
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
sesiones

Hola a tod@s
Como siempre, me he estancado en una "tonteria" de esas de los novatos.
De todos modos, veo que en PHP lo de las sesiones no es tan simple como en ASP.

Abro la sesion, me la imprimo.... hasta aquí todo bien pero cuando la intento pasar allí me da error.

El codigo:
Código:
<?php
$colname_Recordset1 = "452";
if (isset($_GET['Id'])) {
  $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['Id'] : addslashes($_GET['Id']);
}
mysql_select_db($database_tienda, $tienda);
$query_Recordset1 = sprintf("SELECT Id FROM usuario WHERE Id = %s", GetSQLValueString($colname_Recordset1, "int"));
$Recordset1 = mysql_query($query_Recordset1, $tienda) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$Id = $row_Recordset1['Id'];
session_cache_limiter('nocache,private');
session_name('ude');
session_start();
#pedimos que escriba el identificador único
echo session_id($Id),"<br>";
echo session_name(),"<br>";
header("location: prueba.php?"echo session_name()."=".session_id($Id));
?>
Se, que el "header" no está bien, faltará o sobra alguna coma......
__________________
Gracias
  #2 (permalink)  
Antiguo 04/09/2009, 04:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: sesiones

Las sesiones son bien faciles de trabajar. Tienes varios errores.

Primero los header no pueden ser declarados cuando antes hayas enviado informacion al navegador. Tienes dos echo declarados antes del header.

Segundo te sugiero declarar una variable que contenga el session_name en vez de estar llamando esa funcion en cada momento

Código PHP:
Ver original
  1. $sName = session_name('ude');

Tercero el echo dentro del header no tiene sentido. Tambien acuerdate de concatenar todo correctamente.
Código php:
Ver original
  1. header("Location: prueba.php?".$sName."=".session_id($Id));
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 04/09/2009, 04:23
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

¡¡¡¡¡¡¡¡¡¡¡¡Genial!!!!!!!!!!!!

Ha salido a la primera

Gracias abimaelrc
__________________
Gracias
  #4 (permalink)  
Antiguo 04/09/2009, 04:31
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: sesiones

¿todavia sigues con el pensando de:?

Cita:
veo que en PHP lo de las sesiones no es tan simple como en ASP
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 04/09/2009, 05:32
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

Bueno, me resultó más dificil eso lo de las sesiones.
Pero reconozco, que en general el PHP es más facilito a la hora de que funcione todo sin demasiados "ensayos"

Volviendo a las sesiones....ahora el siguiente paso es recuperarla en la pagina "prueba.php". Pues, el código que tengo es:


Código:
<?php
// Inicializamos sesion 
session_start(); 
// Comprovamos si existe la variable
if ( isset ( $_SESSION["ude"] ) ) {
 // Si existe
 echo $_SESSION["ude"];
} else {
 // Si no existe
 echo "desconocido";
}
?>
Ahora, me muestra "desconocido", aunque en la barra de la dirección se imprime bien:

"http://.../SITIO/prueba.php?ude=cg178t3get6ig3ag662gv3o6f3"

eso significa que mi código no recupera la sesión y ... que sigo siendo novatilla
__________________
Gracias
  #6 (permalink)  
Antiguo 04/09/2009, 08:33
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: sesiones

Es que con esta linea que colocaste

Código PHP:
Ver original
  1. session_cache_limiter('nocache,private');
No se esta guardando la sesion. Tendrias que quitar esta linea para que te funcione lo que acabas de hacer. Pero si tu quieres recuperar ese valor que esta en el campo de direcciones ya no es a través de sesiones sino que lo vas a recuperar con la variable $_GET

Código PHP:
Ver original
  1. <?php
  2. // Comprovamos si existe la variable
  3. if ( isset ( $_GET["ude"] ) ) {
  4.  // Si existe
  5.  echo $_GET["ude"];
  6. } else {
  7.  // Si no existe
  8.  echo "desconocido";
  9. }
  10. ?>
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 04/09/2009, 10:07
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

abimaelrc, gracias por responder y por la paciencia

Ahora si logro recuperar "ude", pero lo que estoy intentando hacer es pasar el número de identificación de usuario "Id" (guardandolo en "session").

Me he liado con sesion_id por que, según lo que encontré en internet, permite propagar sesiones incluso cuando el usuario tiene bloqueada la opción de aceptar cookies y por otra parte esconde el valor "Id" (que no aparezca en la barra de dirección)

No se si me explico bien.....
__________________
Gracias
  #8 (permalink)  
Antiguo 04/09/2009, 10:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: sesiones

Pues en este caso elimina la linea

Código PHP:
Ver original
  1. session_cache_limiter('nocache,private');
Ya con eso puedes ver las sesiones todo el tiempo
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 04/09/2009, 11:58
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

Ya me imprime el valor de 'ude' <--- muchos números y letras

¿Pero como recupero el valor $Id?
que es el que realmente me interesa
__________________
Gracias
  #10 (permalink)  
Antiguo 04/09/2009, 13:56
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: sesiones

Te falta declarar el id en una session, en la pagina que declaraste. Tendrias que hacer algo asi
Código PHP:
Ver original
  1. <?php
  2. $colname_Recordset1 = "452";
  3. if (isset($_GET['Id'])) {
  4.   $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['Id'] : addslashes($_GET['Id']);
  5. }
  6. mysql_select_db($database_tienda, $tienda);
  7. $query_Recordset1 = sprintf("SELECT Id FROM usuario WHERE Id = %s", GetSQLValueString($colname_Recordset1, "int"));
  8. $Recordset1 = mysql_query($query_Recordset1, $tienda) or die(mysql_error());
  9. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  10. $totalRows_Recordset1 = mysql_num_rows($Recordset1);
  11. $Id = $row_Recordset1['Id'];
  12. session_name('ude');
  13. $_SESSION["ID"] = $Id;
  14. #pedimos que escriba el identificador único
  15. header("location: prueba.php");
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 05/09/2009, 02:36
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

Lo hice, no funcionó...

Empiezo pensar que es cuestion de confiuración php.ini ya que ningun codigo de sesiones funciona (ni los más simples). Estoy en ello.
__________________
Gracias
  #12 (permalink)  
Antiguo 05/09/2009, 02:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: sesiones

No es problema ya del php.ini ya que has visualizado las sesiones. En este caso habria que ver si esta trayendo informacion $Id. Te sugiero usar
Código php:
Ver original
  1. var_dump($Id);
Para ver si trae alguna informacion
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 05/09/2009, 03:32
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

var_dump me trae NULL

Es muy raro por que usando GET si puedo recuperar el identificador de la sesión pero no el de Id

A ver, los códigos que estoy probando ahora son:

Pagina "prueba1.php" para crear la sesión:

Código:
<?php require_once('Connections/connection.php'); ?>
<?php
$colname_Recordset1 = "452";
if (isset($_GET['Id'])) {
  $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['Id'] : addslashes($_GET['Id']);
}
mysql_select_db($database_tienda, $tienda);
$query_Recordset1 = sprintf("SELECT Id FROM usuario WHERE Id = %s", GetSQLValueString($colname_Recordset1, "int"));
$Recordset1 = mysql_query($query_Recordset1, $tienda) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$Id = $row_Recordset1['Id'];
session_name('ude');
session_start();
$_SESSION["ID"] = $Id;
#pedimos que escriba el identificador único
header("location: prueba2.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>

</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
Pagina prueba2.php para recuperar la sesión:

Código:
<?php
error_reporting( E_ALL );
// Inicializamos sesion 
session_start(); 
$_GET['Id'] = $Id
// Comprovamos si existe la variable
if ( isset ( $_GET['Id'] ) ) {
 // Si existe
 echo "El valor de la sesion Id es: " .$_GET['Id'];
} else {
 // Si no existe
 echo "desconocido";
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php echo $_GET['Id'];
var_dump($Id); ?>
</body>
</html>
Si uso $_SESSION en la pagina "prueba2.php" tampoco funciona
__________________
Gracias

Última edición por Anushka; 05/09/2009 a las 03:45
  #14 (permalink)  
Antiguo 05/09/2009, 03:47
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

En la pagina "prueba1.php" var_dump imprime el valor $Id sin problemas. Lo que no hace, es pasarlo a la pagina "prueba2.php"
__________________
Gracias
  #15 (permalink)  
Antiguo 05/09/2009, 05:09
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

Soy una NOVATILLAAAAAAAAAAAAAAA pero de las más despistadas......

El problema era en la página que recuperaba la sesión.
Ántes de session_start había que poner session_name.....

Bueno, otro problemilla resuelto.

Gracias a este foro
y a abimaelrc
__________________
Gracias
  #16 (permalink)  
Antiguo 05/09/2009, 05:14
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: sesiones

Tienes una mezcla de conceptos. Te sugiero leer un poco para que te puedas desenvolver. Pero corrigiendo lo que has hecho.

En prueba1.php
Primero no necesitas declarar un doctype ni nada de HTML ya que el header redirecciona por lo tanto no es necesario todo lo de html.

En prueba2.php estas haciendo esto
Código PHP:
Ver original
  1. $_GET['Id'] = $Id
Error grave. $_GET lo que hace es obtener la variable del campo de direcciones, tu no declaras un $_GET para que tenga una variable. Es mas ni necesitas $_GET. Tu lo que necesitas es obtener el dato de un $_SESSION. Te voy a dar un ejemplo de como usar sesiones y lo adaptas, asi vas a poder entender mejor.

prueba1.php
Código php:
Ver original
  1. <?php
  2. $_SESSION["creandoUnaSesion"] = "valor que va en la sesion";
  3. header("Location: prueba2.php");
prueba2.php
Código PHP:
Ver original
  1. <?php
  2. echo $_SESSION["creandoUnaSesion"];

No tienes que declarar un session_name para usar sesiones. Te sugiero que por el momento no uses session_name
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #17 (permalink)  
Antiguo 05/09/2009, 05:21
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

Ya está echo abimaelrc

Simplemente, mientras leía, a la vez pegaba en el tema los codigos que probaba en este momento.

.... los labirintos de autodidactas.....jejeje....es cuando te ahogas en el agua intentas agarrarte lo primero que encuentras a mano....

No hay mal que por bien no venga....
Ahora tengo más claridad

Gracias de nuevo por tu paciencia
__________________
Gracias
  #18 (permalink)  
Antiguo 05/09/2009, 05:24
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: sesiones

No me di cuenta que habías escrito que lo resolviste, escribia mientras indicabas que lo resolviste Espero que puedas lograr lo que estas haciendo
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #19 (permalink)  
Antiguo 05/09/2009, 05:24
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

Cita:
Iniciado por abimaelrc Ver Mensaje
No tienes que declarar un session_name para usar sesiones. Te sugiero que por el momento no uses session_name
Pero sin session_name no se propaga la sesión.
He probado montones de códigos entre ayer y hoy.
Y el único caso que me funcionó es cuando declaro session_name
__________________
Gracias
  #20 (permalink)  
Antiguo 05/09/2009, 05:26
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: sesiones

Prueba lo que te escribi para que veas que no es necesario hacerlo. Sino pues es que tienes desabilitado la opcion de cookies, que en ese caso necesitarias declarar esa session. Pero prueba el ejemplo que te di y me dejas saber.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #21 (permalink)  
Antiguo 05/09/2009, 05:36
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: sesiones

Si, el tuyo funciona....

A saber lo que hice yo con todos esos códigos y php.ini.......

Ahora funciona sin session_name

Vamos, ... que a veces me bloqueo y desbloqeo así a lo tonto
__________________
Gracias
  #22 (permalink)  
Antiguo 05/09/2009, 05:43
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: sesiones

Anushka eso es normal te lo dice otro novato :P ajajja
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 04:18.