Foros del Web » Programando para Internet » PHP »

dudas respecto a las sesiones

Estas en el tema de dudas respecto a las sesiones en el foro de PHP en Foros del Web. Buenas, tengo unas dudas con el tema de sesiones y así. Por ejemplo para guardar variables, yo lo que hago es: Código: session_start(); session_register('s_usuario'); session_register('s_password'); ...
  #1 (permalink)  
Antiguo 22/03/2006, 08:18
 
Fecha de Ingreso: marzo-2005
Mensajes: 30
Antigüedad: 12 años, 8 meses
Puntos: 0
dudas respecto a las sesiones

Buenas, tengo unas dudas con el tema de sesiones y así.

Por ejemplo para guardar variables, yo lo que hago es:

Código:
session_start();
session_register('s_usuario');
session_register('s_password');
$s_usuario = trim($HTTP_POST_VARS['usuario']);
$s_password = trim($HTTP_POST_VARS['password']);
$s_permiso = 1;
¿Qué seria mejor? ¿Guardar los valores en un array?

Luego a la hora de autentificarse, no se como hacer, yo hago una consulta del usuario y contraseña que he guardado en la variable para ver si es correcto, y luego aparte, que la variable "$s_permiso" sea igual a 1, entonces, si todos los logueados van a tener el permiso 1, ¿creeis que es mejor solo controlar mediante una condición que si tiene permiso igual a 1 le deje o no? y así quitar la condición que hago contra la base de datos, que igual eso algo realentizará...

En etsa página estoy aprendiendo un huevo ;) No sol ode php, sino de css y así tambien ^^

Un saludo.
  #2 (permalink)  
Antiguo 22/03/2006, 08:42
Avatar de atak  
Fecha de Ingreso: julio-2005
Ubicación: Huancayo
Mensajes: 490
Antigüedad: 12 años, 4 meses
Puntos: 5
De acuerdo Sessiones

Hola zehc

Tu código podrias trabajarlo de la siguiente manera:
Código PHP:
<?php
// si los datos de Usuario y password son enviados desde un  formulario  sea  HTML o  Action Script ( POST)

// recibo las variables :
$xuser=$_POST['vuser'];
$xpass=$_POST['vpassword'];
// cuentas con una  tabla  USUARIOS
// conexion  a la BD
$sql="SELECT * FROM usuarios where nombre_user=$xuser";
$cn=mysql_query($sql)or die ("error consulta 1");
$n=mysql_num_rows($cn);
if(
$n>0// quiere decir que  tu usario existe
{
       
$dato=$mysql_fetch_array($cn);
   
       if (
$datos['pass']==md5($xpass))
       {
           
//  encontro un USUARIO correcto 
           ///  a  este  usuario le  asignamos  una SESION que  le valdra para el resto de nuestras  paginas
        
session_start();
        
$_SESSION['user']=$xuser;
          
///////  continuas con tu script
         
header("location: ingreso.php");
       }
      else
      {
        echo 
"El Password no es correcto ";
      }
   
}
else
{
  echo 
"NOmbre Incorrecto <br>  intente nuevamente  ";

}


?>
De esa manera manejalo tus SESSIONES

$_SESSION['user'] es una varible global.


Salu2
__________________
. .: El mejor Inicio :. .
  #3 (permalink)  
Antiguo 22/03/2006, 10:23
 
Fecha de Ingreso: marzo-2005
Mensajes: 30
Antigüedad: 12 años, 8 meses
Puntos: 0
Gracias, de esta manera he aprendido a trabajar con la variable global esa... yo trabajaba de la otra manera...

Yo tengo estructurada por partes, es decir, toda la plantilla y luego egun que quiero el contenido de ella, he leido que el session_start(); hay que hacerlo nada más empezar, entonces eso hago, en la plantilla, que es la que carga siempre lógicamente, arriba del todo le tengo puesto session_start();, ya no le pongo más veces, ¿eso esta bien así?

Tengo un archivo, que mediante el include lo añado, que es para saber si esta logueado o no, es este:

Código:
<?php 
$loginCorrecto = false; 
$usuid;
$usunick;
$usupassword;
$usuemail;
if(isset($_SESSION['nick']) && isset($_SESSION['password']))
{
	$result = mysql_query("SELECT * FROM usuarios WHERE usuario='".$_SESSION['nick']."' AND password='".$_SESSION['password']."'"); 
	if($row = mysql_fetch_array($result)) 
	{
		$loginCorrecto = true;
		$usuid = $row["id"];
		$usunick = $row["usuario"];
		$usupassword = $row["password"];
		$usuemail = $row["email"];
	}
	else
	{
		$loginCorrecto = false;
		session_unset();
	}
	mysql_free_result($result);
}
entonces, con esto se si esta coenctado y a la vez tengo todos sus datos... lo queria añadir en un archivo que tengo de funciones y pues lo añado como otro cualquiera.

Código:
function tenerpermisos()
{
$loginCorrecto = false; 
$usuid;
$usunick;
$usupassword;
$usuemail;
if(isset($_SESSION['nick']) && isset($_SESSION['password']))
{
	$result = mysql_query("SELECT * FROM usuarios WHERE usuario='".$_SESSION['nick']."' AND password='".$_SESSION['password']."'"); 
	if($row = mysql_fetch_array($result)) 
	{
		$loginCorrecto = true;
		$usuid = $row["id"];
		$usunick = $row["usuario"];
		$usupassword = $row["password"];
		$usuemail = $row["email"];
	}
	else
	{
		$loginCorrecto = false;
		session_unset();
	}
	mysql_free_result($result);
}
}
a la hora de llamarlo, hago el include de dicho archivo, luego llamo a la función, esto en la plantuilla arriba tambien.

Código:
include('includs/functions.php');
tenerpermisos();
Y nada, asi no me coge valores, lo podria hacer que devuelva por ejemplo la variable "$loginCorrecto" pero es que no quiero asi, porque de cualquier manera voya tener acceso a ella ¿no? a parte... quiero esos datos que meti en las variables

Código:
$loginCorrecto = true;
$usuid = $row["id"];
$usunick = $row["usuario"];
$usupassword = $row["password"];
$usuemail = $row["email"];
¿algúin consejo? es que metiendo la funcion en el archivo de todas las funciones no me hace nada... en cambio, si lo meto ese solo en un archivo y le hago el include, así si va :s

No entiendo.

Saludos.
  #4 (permalink)  
Antiguo 22/03/2006, 15:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Para que propagas en una variable se sesión un "password" que luego usas para hacer una consulta SQL a tu BBDD? y obtener datos extra del usuario + validación del usuario.

No tiene sentido hacer eso cuando uno usa sesiones.

El proceso de "autentificación" ha de hacerse directamente desde tus formularios de "login" donde pides tu par: usuario/contraseña y de ahí los contrastas contra tu BBDD para obtener si es correcto ese "login" o no, en ese punto tu creas las variables de sesión necesarias que identifiquen a tu usuario: un "nick" o nombre, su ID para usarlo en otras relaciones en tus sistemas .. y otros datos si lo requieres.

Luego pasas al proces de "validación" de que ese usuario esté en el sistema autentificado .. en ese caso -sólo- revisas si existe tus variables de sesión (con una -sobra-) y listo .. NO es necesario ni es óptimo andar "consultando" constantemente una BBDD para ese fin y usando sesiones.

Así que uno de tus scripts protegidos por sesiones simplemente sería cosa de hacer validaciones tipo:

Código PHP:
<?
session_Start
();
if (!isset(
$_SESSION['alguna_De_tus_varibles'])){
die (
"NO está autentificado");
}

// resto de tu script .. Lo anterior por supuesto que puedes desglosarlo en un archivo externo y llamarlo por un "include()" donde lo requieras.
Esta filosofía de trabajo de este tipo de sistemas la puedes ver en este ejemplo:

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

Tan sólo observa su código y los ejemplos .. veras todo esto que te he comentado.

Cita:
Yo tengo estructurada por partes, es decir, toda la plantilla y luego egun que quiero el contenido de ella, he leido que el session_start(); hay que hacerlo nada más empezar, entonces eso hago, en la plantilla, que es la que carga siempre lógicamente, arriba del todo le tengo puesto session_start();, ya no le pongo más veces, ¿eso esta bien así?
Si te fijas, en estricto rigor un "include()" hace un "cortar y pegar" del código que se llama desde el punto que se usa dicha función hasta donde termine el código que llamas externo, continuando con el resto del código del script que lo llame. Todo ello junto para el interprete de PHP forma una entidad (un sólo código) y se ejecuta .. por ende si el pre-requisito de usar sesiones es que tenga que estar un "session_start()" al principio del código o mejor dicho antes de pretender acceder al array superglobal: $_SESSION o usar cualquier otra función de session_xxxx() relacionada .. ...

Lo que mencionas es correcto (si, despues de todo el blablabla xD), pero ten cuidado si alguien te llama a tus scripts que tienes por llamadas por "include()" en forma directa .. ¿que pasaría ahí? .. tal vez nada depende de lo que hagan estos .. de que variables usen (de sesión) .. etc.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 23/03/2006, 04:12
 
Fecha de Ingreso: marzo-2005
Mensajes: 30
Antigüedad: 12 años, 8 meses
Puntos: 0
Muchas gracias Cluster ^^ cuando emepce con esto ya me baje el autentificator, pero no se, queria empezar desde 0... haerlo yo todo 0, porque para dar hecho ya esta el Nuke, el Mambo, el Truzone, pero si, me puedo bastar y ver por encima lo tuyo.

Coger los conceptos y metodos que es lo que importa ^^ yo no quiero hacerlo por hacer, si no entenderlo :)

Saludos!
  #6 (permalink)  
Antiguo 23/03/2006, 05:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por zehc
Muchas gracias Cluster ^^ cuando emepce con esto ya me baje el autentificator, pero no se, queria empezar desde 0... haerlo yo todo 0, porque para dar hecho ya esta el Nuke, el Mambo, el Truzone, pero si, me puedo bastar y ver por encima lo tuyo.

Coger los conceptos y metodos que es lo que importa ^^ yo no quiero hacerlo por hacer, si no entenderlo :)

Saludos!
Entonces te recomiendo lectura sobre sesiones .. empezando por la documentación de PHP. Cuanto más sepas sobre ellas, mejor te irá, tanto para desarrollar tu aplicación basada en ellas, como por ejemplo para saber por qué en algún caso no te funciona el mismo código que en otros servidores o condiciones funciona .. o para no "pedir" cosas a las sesiones de PHP que no hacen por sí solas (por ejemplo un control "fino" del tiempo de vida de cada sesión... el soporte de sesiones de PHP No lo hace así sino que sólo lo gestiona a nivel "global" para toda sesión abierta ...).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 28/03/2006, 05:02
 
Fecha de Ingreso: marzo-2003
Mensajes: 225
Antigüedad: 14 años, 9 meses
Puntos: 0
Hola:

Ante todo felicitar a Cluster por su infinita paciencia con los novatos.

Yo también estoy instalando instalar un sistema de autentificación con poquísimo éxito.
Hasta ahora he usado Dreamweaver pero he tenido que comprarme un tratado de PHP que estoy intentando digerir.

La situación es que tengo una tabla con unos 300 user y pass con 2"versiones": una en access en el pc y otra en un foro phpbb con la contraseña encriptada con MD5(128bits), y estoy intentando evitar meter uno a uno los 300 usuarios otra vez. Además, hasta ahora tenía doble registro: uno a través del servidor con la opción "proteger carpetas", y otro en el foro phpbb (he visto en algún post que podrían "unficarse", pero eso lo dejo para más adelante)

He cambiado servidor linux por windows con IIS, PHP, Mysql, etc, y quiero instalar un sistema de autentificación que permita gestionar los usuarios con comodidad.

He probado con las extensiones de DW y la tabla del foro phpbb, y el problema es que me aparecen los datos del primer registro en el login directamente, la contraseña codificada.

He probado con scripts, entre otros Login&Redirect (mpdolan.com) que es bastante completo, pero me da problemas al redireccionar (seguramente por el path) y no me conecta usando las claves adecuadas (problemas de encriptación o bd phpbb).

He probado el tuyo que me parece simple, eficaz y muy pedagógico, pero necesito añadirle la opción "recordar contraseña", "recuperar claves por correo electrónico" y encriptación de contraseña, así que volveré a revisarlo para ver si aprendo algo más de php que falta me hace.

De todas formas, te agradecería sinceramente cualquier consejo.

Saludos
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:25.