Foros del Web » Programando para Internet » PHP »

problemas con sessiones, en que estoy mal

Estas en el tema de problemas con sessiones, en que estoy mal en el foro de PHP en Foros del Web. hola a todo sde nuevo, tengo dudas sobre, sesiones, ya lei todos los manuales que encontr en la red y he checado todas las pregntas ...
  #1 (permalink)  
Antiguo 13/12/2006, 14:50
 
Fecha de Ingreso: mayo-2006
Ubicación: mexico, distrito federal
Mensajes: 64
Antigüedad: 18 años, 6 meses
Puntos: 0
problemas con sessiones, en que estoy mal

hola a todo sde nuevo, tengo dudas sobre, sesiones, ya lei todos los manuales que encontr en la red y he checado todas las pregntas que hacen en el foro y pues bueno nada, el problema es este, estoy logeando desde una pagina, paso a otra que se llama segura donde verifico si es la clave y el usuari pero cuando manda a la siguiente pagina no me imprime las variables

esta es la pagina de inicio
inicio.html
Código PHP:
<body>
<
form method="post" action="segura.php" name="form1">
  <
table border="1">
    <
tr><tdUsuario: <input type="text" name="user" size="15"> </td> </tr>
    <
tr><td>Clave: <input type="text" name="pass" size="15"></td> </tr>
  </
table>
  <
br>
    <
input type="submit" name="enviar" value="LogIn">
</
form>
</
body
aqui verifico que sea el usurio y clave
segura.php

Código PHP:
<?
  $user
=$_POST["user"];  $pass=$_POST["pass"];

  if(
$user == "usuario" and $pass == "clave")
    {
       
session_start();       
       
session_register('user');
       
session_register('pass');
  
//hasta aqui si llegan las variables
       
header("Location: recibe.php");  
    } 
  else
    {
      
header ("Location: inicio.html");
    }
?>
aqui es donde ya no recibo las variables, no las imprime,
recibe.php
Código PHP:
<?
  session_start
();   
  
$user=$_SESSION['user'];
  
$pass=$_SESSION['pass'];  
  echo 
"Usuario: ".$user."<br>";
  echo 
"Clave: ".$pass."<br>";
?>
que estoy haciendo mal, esla primera vez que manejo sesiones y pues no se si se tenga que mover algo al php.ini, si es asi, avisenme para estudiar mas y modificar y aprender bien session, muchas gracias por las posibles respuestas...
  #2 (permalink)  
Antiguo 13/12/2006, 15:58
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: si, problemas con sessiones, en que estoy mal

En segura.php cambia el $_POST por $_GET. Deberia funcionar. Para recibir variables de formularios utiliza $_GET en vez de $_POST. Ya me contaras si t funciona. Salu2. El codigo de segura.php kedaria asi:

Código PHP:
<?
  $user
=$_GET["user"];  $pass=$_GET["pass"];

  if(
$user == "usuario" and $pass == "clave")
    {
       
session_start();       
       
session_register('user');
       
session_register('pass');
  
//hasta aqui si llegan las variables
       
header("Location: recibe.php");  
    } 
  else
    {
      
header ("Location: inicio.html");
    }
?>
  #3 (permalink)  
Antiguo 13/12/2006, 18:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Re: si, problemas con sessiones, en que estoy mal

No usen session_register() y menos en combinación de $_SESSION (array superglobal) .. No lo digo yo sólo .. lo dice php.net en su documentación oficial:

www.php.net/session

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 13/12/2006, 20:40
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 11 meses
Puntos: 22
Re: si, problemas con sessiones, en que estoy mal

Cluster tiene razon no usen session_register('user');
lo recomendable es usar asi:

Código PHP:
session_start();
$SESSION["user"]=$user;
$SESSION["pass"]=$pass

y recuperan en la otra pagina asi:

Código PHP:
$user$SESSION["user"];
$pass$SESSION["pass"]; 
  #5 (permalink)  
Antiguo 14/12/2006, 02:05
 
Fecha de Ingreso: diciembre-2006
Mensajes: 5
Antigüedad: 17 años, 11 meses
Puntos: 0
Re: si, problemas con sessiones, en que estoy mal

si quieres recuperar otras vairables (ademas del user y pass explicadas con anterioridad) las tienes que declarar como variables de session en secura.php
y las recuperas igual que reuperas user y pass.

saludos
  #6 (permalink)  
Antiguo 14/12/2006, 14:24
 
Fecha de Ingreso: mayo-2004
Ubicación: Ciudad de la Habana
Mensajes: 85
Antigüedad: 20 años, 6 meses
Puntos: 0
Pregunta Re: problemas con sessiones, en que estoy mal

Hola a todos tengo una duda con eso del $_GET Y el $_POST si se usa el primero se pasa por la url y con el segundo se pasa oculto pero si se usa el $_GET no se corre el riesgo de que otro usuario mal intencionado vea el usuario y el password y asi comprometer la seguridad de nuestra aplicacion ???

Salu2.
  #7 (permalink)  
Antiguo 14/12/2006, 14:40
 
Fecha de Ingreso: mayo-2006
Ubicación: mexico, distrito federal
Mensajes: 64
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: problemas con sessiones, en que estoy mal

ok, muchas agracias a todos, por las respuestas, voy a utilizar lo que me dicen y muchas gracias por los tips, gracias a todos, si surgen mas dudas, aqui estare dando mas lata, muchas gracias
  #8 (permalink)  
Antiguo 16/12/2006, 15:00
 
Fecha de Ingreso: mayo-2006
Ubicación: mexico, distrito federal
Mensajes: 64
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: problemas con sessiones, en que estoy mal

bueno, ya hasta me da pena, pero tengo que preguntar, lo que pasa es que no quiere quedar los de las session, ya hice lo que me dicen y no llegan las variables... pero antes de todo quiero saber una cosa, talvez ese sea mi problema...

las session son variables o array globales, tengo entendido, se supone que con eso ya se pasan a las demas paginas sin recibirlas de formularios y todo eso, ahora la pregunta seria, si yo tengo por ejemplo esto
<?
session_start();
$_session['variable']="prueba";
?>
segun entiendo, estoy asignadole a $variable, el valor de prueba y si quiero recoger ese valor en otra pagina, entiendo esto, que seria de la siguiente manera
<?
session_start();
$variable=$_session['variable'];
echo $variable;
?>
me dicen si estoy bien o estoy mal, entonces si yo tengo lo siguiente (que eso lo he visto en varios ejemplos y en algunas faq)
<?
session_start();
$_session['variable']="autentificado";
?>
me supondo que autentificado se guarda en la sesion, la pregunta seria, como es que utilizo este valor? mi respuesta seria, para saber si estas autentificado, pero entonces si yo estoy guardando lo que es el usuario y password en una session, no seria lo mismo?
<?
session_start()
$_session['variable']="autentificado";
$_session[user']=$user;
$_session['pass']=$pass;
?>
si es asi, entonces si yo verifico que esta autorizado a entrar, entonces, ¿la impresion del usuario seria de la siguiente manera?
<?
if($variable == "autentificado")
{
echo "USUARIO: ".$_session['user']."<br>";
echo "USUARIO: ".$_session['pass'];
}
?>
sin la necesidad de recogerlos con POST o GET...
ahora diganme esto es asi o mi concepto de sesiones esta mal, si es asi, haganmelo para estudiar bien las sesiones, de ante mano muchas gracias...
  #9 (permalink)  
Antiguo 16/12/2006, 19:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Re: problemas con sessiones, en que estoy mal

Cita:
las session son variables o array globales, tengo entendido, se supone que con eso ya se pasan a las demas paginas sin recibirlas de formularios y todo eso, ahora la pregunta seria, si yo tengo por ejemplo esto
Te falta otro concepto muy importante que estás omitiendo: SID (Identificador Único de sesión) y que es el "responsable" de la "mágia" de por qué funcionan las sesiones. Esto es parte de la teoría de funcionamiento de las sesiones. El uso de sesiones de PHP no se basa exclusivamente en usar cierto código .. hay otros factores: configuración de la propagación del SID y configuración del cliente (Navegador y como acepte cookies si es que se usa propagación del SID en cookies) que afecta a como se comporte tu sistema basado en sesiones.

Cita:
si es asi, entonces si yo verifico que esta autorizado a entrar, entonces, ¿la impresion del usuario seria de la siguiente manera?
Técnicamente sería:

Código PHP:
<?
// INICO uso sesiones, esto es necesario si o sí siempre que accedas a tus variables de sesión ya sea para darles valor o para acceder a su valor.
session_start();

if(empty(
$_SESSION['user']))
{
die (
"Aquí no estás autorizado");
}

echo 
"USUARIO: ".$_session['user']."<br>";
echo 
"USUARIO: ".$_session['pass'];
?>
Fijate que NO uso esa variable que defines como "Autentificado" .. ese tipo de uso de validaciones de variables de sesión es totalmente redundante. Según el comportamiento de una sesión .. la cual permacene asociada al cliente que las crea .. en el momento que "exista" una variable de sesión (alguna que definas) .. ya se creó tu sesión y por ende ya existe, así que si tu propagas en tu sesión N variables .. no es necesario que añadas una más .. ya tienes otras dos al menos que puedes usar (como yo usé en el ejemplo el "user"). También propagar el "pass" en una variable de sesión no tiene mucho sentido .. tu nunca más vas a usar ese par de "user/pass" para validar contra una BBDD o similar .. te vas a basar y así confiaras en tu sesión creada y validada.

Por lo demás .. no uses tanta asiganción de variable de $_SESSION .. a $variable .. usa directamente el array en tus condicionales, sino podrías tener problemas al ser asumidas como "globales", confundiendose con otras variables definidas en tu script o incluso inyectadas por GET o POST.

Cita:
sin la necesidad de recogerlos con POST o GET...
Ya no es que "sin necesidad" sino que en POST o en GET ya no están esos valores en los sub-siguientes scripts que redireccionas .. para eso ya defines variables de sesión y el sistema de sesioens en si de PHP y si se consigue propagar el SID hará su trabajo de dejarte disponible en $_SESSION tus variables de sesión por lo que dure esta.

Te recomiendo leer una vez más sobre sesiones en www.php.net/session .. ya sé que es un manual de "referencia" .. pero ahí está toda la teoría que -todos- los manuales/tutoriales/faq's que puedas ver se basaron. Ten presente que en el uso de sesiones la -configuración- de PHP afecta mucho a como se comporten (por qué ahí definies como propagar el "SID") .. De hecho en mucho tutorial sobre sesiones se les "olvida" (no sé si intencionalmente o no ..) este "detallazo" y por eso suelen venir muchos problemas de "por qué mi código funciona en tal servidor y en otro no".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 17/12/2006, 12:12
 
Fecha de Ingreso: mayo-2006
Ubicación: mexico, distrito federal
Mensajes: 64
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: problemas con sessiones, en que estoy mal

bueno, Cluster y todos los demas gracias por los tips y consejos, y saben, la desesperacion es un arma de doble filo, o te rindes o lo superas, jaja, ayer presisamente lei los manuales que tenia, y encontre algunas cosas que me sirvieron mucho, ademas de que revise el php.ini, por que antes habia hecho algo en el, que la verdad es que no me acordaba que, y era algo importante que hacia que la sesion se propague a las demas paginas, era sobre una linea que hace que el SID se propague automaticamente, la tenia a 0, y eso era una de las dos cosas que tenia mal, asi es que si no saben como yo, chavos, no le muevan a esta linea a menos que sepan lo que hagan, o les pasara lo mismo que ami...

Código PHP:
session.use_trans_sid 
esta linea no la pongan a 0, porque esto hace que el SID se propague automaticamente...los que ya lo saben en hora buena y los que no espero les sirva esto...

ahora el otro problema que tenia, era que cuando creaba la sesion, redireccionaba a hacia otra pagina con Header('location: pagina.php'), esto me provocaba que las sesiones no llegara a la otra pagina, algo interesante que lei sobre la redireccion con header en este foro en las FAQ's (leanlas) es lo siguiente...

Código PHP:
Este problema sucede ya que PHP guarda los cambios en las variables de session cuando el script finalizay dado que un header() no significa el fin del script (sino un comando más), es necesario "forzar" el guardado y cierre de sesion
creo que esto es algo importante que tambien se les olvida a los pequeños manuales y pues lo siguiente lo pongo textual, lo lei tambien en este foro, en las FAQ's (otra vez, hay que leerlas) que tambien es importante saberlo...

Código PHP:
la solucion es utilizar el comando session_write_close(); que forzara el guardado de los cambios en session (variablesy cerrará la sesion sin destruirla (es decircuando vuelvo a hacer un session_start() la misma session sigue en pie 
y bueno, con todo eso se soluciono mi problema de sesion, y otra vez a todos lo que me apoyaron gracias, lioned69, ginitofl, M_santana, y en especial al cluster, no es por hacer menos a los demas, gracias a todos...

y pues espero que esto les sirva como ami, para que no tengan tanto problema con las sesiones, a los que ya lo sabian, que bien y a los que no espero les sirva esto... ademas esto viene en las faq's

http://www.forosdelweb.com/showpost....&postcount=162

saludos y suerte a todos, hasta las proximas dudas
  #11 (permalink)  
Antiguo 17/12/2006, 17:04
Avatar de Falhor  
Fecha de Ingreso: diciembre-2005
Ubicación: Buenos Aires
Mensajes: 425
Antigüedad: 18 años, 11 meses
Puntos: 5
Re: problemas con sessiones, en que estoy mal

Cita:
Iniciado por choco_cu Ver Mensaje
Hola a todos tengo una duda con eso del $_GET Y el $_POST si se usa el primero se pasa por la url y con el segundo se pasa oculto pero si se usa el $_GET no se corre el riesgo de que otro usuario mal intencionado vea el usuario y el password y asi comprometer la seguridad de nuestra aplicacion ???

Salu2.
Por lo que vi no te respondieron esto, y creo que es más importante que aprendas a que te den el código echo.
Como decís, en GET se pasan las variables a través de la URL, por eso se usa el POST para loguearse y todo eso, pero el GET se usa por ejemplo para paginar resultados, o mostrar una cosa u otra un ejemplo:

Entrá acá: PHP

Fijate que la url dice forumdisplay.php?f=18.

Ahora entrá acá: Web-Hosting

Fijate que la url dice forumdisplay.php?f=19.

Entonces, la página es la misma: forumdisplay.php, pero no muestra el mismo subforo porque la variable $f tiene un valor distinto, esa variable que está en la URL se saca con $_GET.

Espero haberme explicado lo mejor posible.
  #12 (permalink)  
Antiguo 18/12/2006, 11:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Re: problemas con sessiones, en que estoy mal

Intenten no mezclar preguntas distintas en un mismo tema, inicien un nuevo tema y continuen en ella.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 01/04/2007, 13:31
 
Fecha de Ingreso: febrero-2006
Mensajes: 2
Antigüedad: 18 años, 9 meses
Puntos: 0
Exclamación Re: problemas con sessiones, en que estoy mal

hola estaba leyendo su post y ando con problemillas , ando aprendiendo mas php , pero me tope con un problemilla...
el usuario agrega su username y pass , entra normal a su cuenta digamoslo asi , pero al agregar el codigo de session .. en "login_success.php"
con ese codigo deberia prohibir a un usuario q no este logueado entrar a la cuenta del usuario , ojo: lo si prohibe... pero cuando me logueo para entrar con mi user y pass ia creados , me rebota y me deja en el login_form.html :S
que bronca :S ando leiendo algunos manuales, pero no me sale aun :S si me dan una mano por ahi les agradeceria mucho ..
ahi les dejo el codigo de los tres archivos q uso :
1- Formulario: login_form.html
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form action="checkuser.php" method="post" name="" id="">
<table width="50%" border="0" align="center" cellpadding="4" cellspacing="0">
<tr>
<td width="22%">Usuario</td>
<td width="78%"><input name="username" type="text" id=" usuario "></td>
</tr>
<tr>
<td>Contraseña</td>
<td><input name="password" type="password" id="password"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Entrar"></td>
</tr>
</table>
</form>
</body>
</html>

2- el codigo que verifica si el usuario es correcto o no "checkuser.php"
<?

session_start(); // Start Session
include 'db.php';

$username = $_POST['username'];
$password = $_POST['password'];
if((!$username) || (!$password)){
echo "Please enter ALL of the information! <br />";
include 'login_form.html';
exit();
}

$password = md5($password);

$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'");
$login_check = mysql_num_rows($sql);
if($login_check > 0){
while($row = mysql_fetch_array($sql)){
foreach( $row AS $key => $val ){
$$key = stripslashes( $val );
}

session_register('first_name');
$_SESSION['first_name'] = $first_name;
session_register('last_name');
$_SESSION['last_name'] = $last_name;
session_register('email_address');
$_SESSION['email_address'] = $email_address;
session_register('special_user');
$_SESSION['user_level'] = $user_level;
mysql_query("UPDATE users SET last_login=now() WHERE userid='$userid'");
header("Location: login_success.php");
}
} else {
echo "You could not be logged in! Either the username and password do not match or you have not validated your membership!<br />
Please try again!<br />";
include 'login_form.html';
}
?>

3- este es el codigo de la cuenta del usuario: login_success.php
<?
//iniciamos la sesión
session_name("loginUsuario");
session_start();
//antes de hacer los cálculos, compruebo que el usuario está logueado
if ($_SESSION["autentificado"] != "SI") {
//si no está logueado lo envío a la página de autentificación
header("Location: login_form.html");
} else {
//sino, calculamos el tiempo transcurrido
$fechaGuardada = $_SESSION["ultimoAcceso"];
$ahora = date("Y-n-j H:i:s");
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));
//comparamos el tiempo transcurrido
if($tiempo_transcurrido >= 600) {
//si pasaron 10 minutos o más
session_destroy(); // destruyo la sesión
header("Location: login_form.html"); //envío al usuario a la pag. de autenticación
//sino, actualizo la fecha de la sesión
}else {
$_SESSION["ultimoAcceso"] = $ahora;
}
}
?>
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 14:04.