Foros del Web » Programando para Internet » PHP »

Duda sobre sesiones (DO NOT HIT ME)

Estas en el tema de Duda sobre sesiones (DO NOT HIT ME) en el foro de PHP en Foros del Web. Hola a todos, Siempre he usado cookies para la identificación, por lo que de sesiones ando perdido. He reprogramado mi web por sesiones, la estructura ...
  #1 (permalink)  
Antiguo 07/02/2009, 14:24
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 6 meses
Puntos: 1
Exclamación Duda sobre sesiones (DO NOT HIT ME)

Hola a todos,
Siempre he usado cookies para la identificación, por lo que de sesiones ando perdido.
He reprogramado mi web por sesiones, la estructura es la siguiente.

Al comprobar, hago:

session_start();
(VALIDO LOS DATOS)
$XXXX["user"]=$nombre;
$XXXX["clave"]=$password;
session_register("XXXX");
header("location: index.php");

Pues bien, simplemente para comprobar si estás logueado, hago lo siguiente:

session_start();
if(strlen($_SESSION['FiM']['user']) > 0){
(OK)
}

//

Yo con las cookies solía conectar a la DB y comprobar los datos de la cookie (usuario y clave) contenidos en ella, y compararla con la db, y en caso de que no coincidieran, die().

Así pues, parece ser que no hace falta hacer esto con las sesiones. ¿Correcto?
Es decir, no hace falta comparar el user y clave contenidos en la sesión con la DB.

Esa es mi pregunta.
Saludos.
  #2 (permalink)  
Antiguo 07/02/2009, 14:32
 
Fecha de Ingreso: diciembre-2008
Mensajes: 454
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

Si lo haces via DB lo mejor es que nombres la sesion con datos provenientes de la DB, es decir:

1- envia datos y lo corroboras con datos de una BD
2- si coinciden haz que los datos se conviertan en sesion
3- manten verificado en todo el sitio restringido con las sesiones

Me entendiste??
  #3 (permalink)  
Antiguo 07/02/2009, 14:36
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

Si, pero luego como llamo a la sesión si desconozco como se llama? Estaría bien un ejemplo.
Gracias
  #4 (permalink)  
Antiguo 07/02/2009, 14:44
 
Fecha de Ingreso: diciembre-2008
Mensajes: 454
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

ejemplo:

Código PHP:
//nombro la sesion con una variiable
$sessionid $_SESSION["nombreescogido"];

//busco los datos desde la BD
$select "SELECT campo FROM tablas WHERE campo='$sessionid'";
$query mysql_query($select) or die (mysql_error());
$row mysql_fetch_assoc($query) or die (mysql_error());

//compruebo los datos con los datos para ver si el usuario y la sesion coinciden
if ($row['passw'] != $sessionid) {

//si no existe, envio a la página index o a la pagina que tu quieras
    
header("Location: index.php?=denied_access");

//ademas salgo de este script
    
exit();

Espero lo entiendas, sino dimelo y juntos lo aclaramos, tranquilo lo principal es mantener la calma
  #5 (permalink)  
Antiguo 07/02/2009, 15:16
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

El procedimiento debe ser el mismo ya sea estés usando sesiones o cookies. Igual debes tomarlas y verificar en la base de datos, y esto porque en variables de sesión no guardarás más que un id y tal vez la contraseña encriptada. Por lo tanto, en cada script debes comprobar estas dos variables y extraer de la bd las demás, como nombre de usuario, etc. Es lo ideal.

Por otro lado session_register() es obsoleto. Para crear variables de sesión simplemente usa el array $_SESSION:

Código PHP:
session_start();

// Para crear
$_SESSION['variable'] = "Valor";

// Para imprimir
echo $_SESSION['variable'];

// Para trabajar con ella, como por ejemplo en un if
if(isset($_SESSION['variable'])) {
    
// si
} else {
    
// no

La princiapl diferencia entre las sesiones y las cookies es que los datos de la sesión se guardan en sel servidor, mientras que las cookies son siempre guardadas en el cliente. Esto hace que los datos de una sesión sólo puedan ser modificados vía script de servidor, como PHP.

  #6 (permalink)  
Antiguo 08/02/2009, 04:08
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

Ya veo, entonces debería hacer lo siguiente veo yo:

Código PHP:
session_start();

// Para crear
$_SESSION['usuario'] = "juanito";
$_SESSION['clave'] = "pepito";


// Para trabajar con ella, como por ejemplo en un if
if(isset($_SESSION['usuario'])) {

 include(
"cnx.php");
$usuario htmlentities($_SESSION[usuario]);
$x mysql_query("SELECT * from miembros where usuario='$usuario'");
$datos mysql_fetch_assoc($x);

if(!
mysql_num_rows($x)){
// Destruyo sesión
} elseif(!($datos[clave] == $_SESSION[clave])){
// Destruyo sesión
}

} else {
    
// No es usuario


De esta forma, si existe la sesión de usuario (el isset la uso para mostrar o no el contenido para el usuario), verifico que esté el la DB y que la clave coincida, sino destruyo la sesión.

¿Correcto?

Gracias.
  #7 (permalink)  
Antiguo 08/02/2009, 04:45
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

Y una cosa mas.
Parece ser que la sesión acaba al cerrarse el Navegador. ¿Hay forma de cambiar la propiedad para que solo se borre pasado X tiempo?

He probado con:

$time = 36000;
ini_set('session.cache_expire', $tiempo);

Pero nada, cierro el navegador y no hay sesion.
Gracias.
  #8 (permalink)  
Antiguo 08/02/2009, 08:45
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

En tal caso podrías usar entonces cookies. Las sesiones por defecto expiran al cerrar el navegador.

Hay una directiva en el php.ini llamada session.cookie_lifetime. Su valor predeterminado es 0, que indica que la cookie que guarda el id de sesión en el cliente desaparecerá al cerrar el navegador. Es el mismo comportamiento que las cookies normales. Puedes usar ini_set() para cambiar el valor de este parámetro:

Código PHP:
ini_set('session.cookie_lifetime'time() + 3600); // Una hora de vida de la cookie 
O también tiernes la función session_set_cookie_params(). Pero debes tener en cuenta que asignar un tiempo de vida a la cookie tu sesión hará que, si por ejemplo estoy una hora inactivo en tu sitio, y luego cambio de página, la sesión habrá terminado y se iniciará una nueva, pese a que nunca salí de tu sitio. En cambio un valor 0 para la duración de la cookie de la sesión asegurará que esta no desaparezca hasta que la sesión actual sea verdaderamente terminada (quiere decir hasta que se cierre el navegador).

  #9 (permalink)  
Antiguo 08/02/2009, 11:50
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

Hola, gracias.
No obstante he probado ese ini_set, y aun así cierro el navegador y esto sigue haciendo que se pierda la sesión.

Saludos.

PD: El post que puse acerca del cotejamiento de datos, hace falta ponerlo, no?
  #10 (permalink)  
Antiguo 08/02/2009, 12:19
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

Mira aquí: http://es.php.net/manual/es/function...rams.php#78930

  #11 (permalink)  
Antiguo 08/02/2009, 12:44
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

Si, ya veo, pero eso es para cookies, no para sesiones que es lo que busco, no?
Saludos.
  #12 (permalink)  
Antiguo 08/02/2009, 13:42
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre sesiones (DO NOT HIT ME)

Las sesiones también tienen una cookie. Cómo crees que se propaga el id de tu sesión? Los datos guardados en una sesión se van al servidor, pero en el cliente se crear una (única) cookie que contiene el id de la sesión, esto para que el servidor sepa qué datos te pertenecen a ti. Esta cookie es la que define la duración de una sesión en el cliente (El terminar una sesión cerrando el navegador no determina que los datos guardados en el servidor de la misma también sean borrados). Al cerrar el navegador, se borra esta cookie, y se pierde la conexión entre el cliente y lso datos de su sesión ahora cerrada. CUando vuelve a entrar, se le asigna otro id y así inicia una nueva sesión.

El truco entonces para lograr lo que deseas es ampliar la vida de esa cookie, y hacer que esta permanezca en el cliente por un tiempo detyerminado independientemente de si cierra o no el navegador. EN el último link que te di está la solución.

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 21:35.