Foros del Web » Programando para Internet » PHP »

variables de sesion en php

Estas en el tema de variables de sesion en php en el foro de PHP en Foros del Web. hola, necesito que alguien me ayude con el siguiente problema: como defino dos variables de sesión para usar simultanemente, una la uso para autenticar usuarios ...
  #1 (permalink)  
Antiguo 17/09/2004, 10:40
 
Fecha de Ingreso: septiembre-2004
Ubicación: Argentina
Mensajes: 49
Antigüedad: 13 años, 2 meses
Puntos: 0
variables de sesion en php

hola, necesito que alguien me ayude con el siguiente problema: como defino dos variables de sesión para usar simultanemente, una la uso para autenticar usuarios ($_SESSION["autenticado"]) y la otra es para definir el rol de ese usuario, es decir si es "usuario" o "administrador". Los datos los saco de una bd mysql. El tema de la autenticación lo tengo resuelto me faltaría definir los roles. Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 17/09/2004, 10:54
Avatar de Willjce  
Fecha de Ingreso: diciembre-2003
Ubicación: Lima - Peru
Mensajes: 67
Antigüedad: 14 años
Puntos: 0
Sonrisa

hola pscheve!!

mira te doy una idea...

Código PHP:
//buscamos los datos
    
$query='select * from sai_persona where pers_login="'.$Xlogin.'" and pers_pass="'$XPass'"';
    
$get=Select_SQL('sai9001',$query);
    
$count_get Count_Select_SQL('sai9001',$query);
//si hay resultado
if($count_get>0){
  
$autenticado[0]=$get['pers_id'];
  
$autenticado[1]=$get['pers_nombres'];
  
//los datos que tu quieras
  
session_start();
  if (
session_is_registered("autenticado")){
    
$autenticado[0]=$get['pers_id'];
    
$autenticado[1]=$get['pers_nombres'];
  }else{
    
session_register("autenticado");
  }
  
//aqui ya auntentificases el usuario y los datos que registrastes como array 
  //lo puedes usarlas como variable globales
  ///////////////////////////////////////
  //luego que todo haya ido bien te diriges a donde tu quieras pero ya 
  //autentificado me entindes
  
$aux="Location: ".$WWW->host."/marco.php";
  
header($aux);
}else{
  
$aux=("[email protected] ingresar al [email protected]@1");
  
$aux="Location: $WWW->host/index.php?$ID=".$aux;
  
header($aux);
  
//aqui se manda que todo fue un error

saludos
__________________
Cita:
El éxito se alcanza convirtiendo cada paso en una meta y cada meta en un paso :pensando:
Att...
Tu amigo Willy... :aplauso:
  #3 (permalink)  
Antiguo 17/09/2004, 11:17
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 15 años, 1 mes
Puntos: 1
los roles debes definirlos en tu base de datos.. eso lo haces??? pues como crear niveles de acceso.. si es administrador o usuario...

bueno si tienes eso resuelto.. es decir, tus roles definidos en la base de datos.. ya solo te queda comparar...

si es administrador entonces haga tal cosa... o si es usuario entonces tal otra.. con las mismas variables de session...

if ($_SESSION["rol"] == "Administrador")
{
// aca lo que pueda hacer o ver el administrador
}

if ($_SESSION["rol"] == "Usuario")
{
// aca lo que pueda hacer o ver el usuario
}

y si es por número es decir nivel de acceso.. 0..1..2....etc

es lo mismo... pero ya pones la condición asi por ejemplo

if ($_SESSION["rol"] <= 5)
{
// entoces haces lo que tenes que hacer
}

bueno eso era solo como una ilustración de lo que podrias hacer.. espero te sirva de algo..

un saludo.
  #4 (permalink)  
Antiguo 17/09/2004, 11:39
 
Fecha de Ingreso: septiembre-2004
Ubicación: Argentina
Mensajes: 49
Antigüedad: 13 años, 2 meses
Puntos: 0
Antes que nada les agradezco a ambos la molestia de contestar mi consulta, y me asombro también la rapidez :)
Yo tengo en la bd los campos "usuario, contra y tipo", donde este último define si es usuario o admin. Mi duda está en la sintaxis de mi código cuando uso dos variables de sesión en el mismo formulario. El código es:

<?
mysql_connect('localhost','root','');
mysql_select_db('AdminTS');
$ssql = "SELECT * FROM users WHERE usuario ='$usuario' and contra='$contra'";
$rs=mysql_query($ssql);
if (mysql_num_rows($rs)!=0){
session_start();
$_SESSION["autenticado"]="SI";
if ($tipo=="admin"){
$_SESSION["usuario"]="admin";}
header("Location: frames2.php");
}
else {
header("Location: login.php?errorusuario=si");
}
mysql_free_result($rs);
mysql_close();
?>
// es decir, una vez verificado usuario y psw me asignaría "autenticado=si" y depende el tipo de usuario genero otra variable de sesión para después levantarla desde otro formulario y mostrar los menués adecuados para ese usuario.
  #5 (permalink)  
Antiguo 17/09/2004, 11:48
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 15 años, 1 mes
Puntos: 1
mmm tu session_start() debes estar en la primera línea

<?
session_start();
mysql_connect('localhost','root','');
mysql_select_db('AdminTS');
$ssql = "SELECT * FROM users WHERE usuario ='$usuario' and contra='$contra'";
$rs=mysql_query($ssql);
if (mysql_num_rows($rs)!=0){
$_SESSION["autenticado"]="SI";
if ($tipo=="admin"){
$_SESSION["usuario"]="admin";}
header("Location: frames2.php");
}
else {
header("Location: login.php?errorusuario=si");
}
mysql_free_result($rs);
mysql_close();
?>

mmm y no tenes problema con usar las variables de sesion...
  #6 (permalink)  
Antiguo 17/09/2004, 12:15
 
Fecha de Ingreso: septiembre-2004
Ubicación: Argentina
Mensajes: 49
Antigüedad: 13 años, 2 meses
Puntos: 0
Salome, mil gracias por tu ayuda!! Te molesto con una más (espero que sea la última!!!) Si lo anterior está bien entonces el problema lo tengo cuando tomo la variable en el otro formulario.

El error que me aparece es: Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in /var/www/html/utopix/menuizq.php on line 18

<?
session_start();
if ($_SESSION["usuario"]=="admin"){
$user="admin";
}
?>
<html>
<body>

<br>
<table >
<tr><th>Men&uacute; Principal</th></tr>
<tr align=left>
<td>
<a href='consulta.php' target="menuder">Visualizar Tabla</a></td></tr>
<? if($user=="admin")
echo "<tr align=left><td><a href='consulta2.php' target="menuder">Configurar Tab
la</a></td></tr>";
echo "<tr align=left><td><a href='registro.php' target="menuder">A&ntilde;adir U
suario</a></td></tr>";
?>
<tr align=left><td>
<br>
<a href='salir.php'>Salir</a></td></td>
</table>

besos
  #7 (permalink)  
Antiguo 17/09/2004, 13:18
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 15 años, 1 mes
Puntos: 1
Cual es tu línea 18????
  #8 (permalink)  
Antiguo 17/09/2004, 14:17
Avatar de Willjce  
Fecha de Ingreso: diciembre-2003
Ubicación: Lima - Peru
Mensajes: 67
Antigüedad: 14 años
Puntos: 0
De acuerdo

Hola pscheve.... disculpa por la demora es que tenia que terminar con un modulo.

bueno yo te diria que lo hagas asi :
[PHP]
//esto es tuyo
$ssql = "SELECT * FROM users WHERE usuario ='$usuario' and contra='$contra'";
$rs=mysql_query($ssql);
if (mysql_num_rows($rs)!=0){
session_start();
$_SESSION["autenticado"]="SI";
if ($tipo=="admin"){
$_SESSION["usuario"]="admin";}
header("Location: frames2.php");
}
else {
header("Location: login.php?errorusuario=si");
}
//////////////////////////////////////////////////////////////////
//y yo lo haria :
//pero que no se te olvide esto debe de venir del archivo index.html o php
//como un submit ok
//archivo login.php
$ssql = "SELECT tipo FROM users WHERE usuario ='$usuario' and contra='$contra'";
$rs=mysql_query($ssql);
$get=mysql_fetch_array($rs);
//supongo que $tipo es el tipo de usaurio
$tipo=
$count_get=mysql_num_rows($rs);

if($count_get>0){
$autenticado[0]=$get['tipo'];
$autenticado[1]=$get['pers_nombres'];
//los datos que tu quieras
session_start();
if (session_is_registered("autenticado")){
$autenticado[0]=$get['tipo'];
$autenticado[1]=$get['pers_nombres'];
}else{
session_register("autenticado");
}
$aux="Location: ".$WWW->host."/destino1.php";
header($aux);
}else{
$aux="Location: ".$WWW->host."/index.php?error=true";
header($aux);
}
///////////
//////////////////aqui tienes que crear un archivo que va servir como
//cabecera ok
//archivo valusu.php
<?
session_start();
if(empty($_SESSION['sai9001'])){
$aux=encode_url_simple("[email protected] el manejo de la [email protected]@1");
$aux="Location: index.php?error=true";
header($aux);
}
$USERD->tipo=$sai9001[0];
$USERD->nombre=$sai9001[1];
?>

///////////////////////////////////////////////////
//el archivo destino1.php
include("valusu.php");
global $USERD;
<?
if ($USERD->tipo=="admin"){
$user="admin";
}
?>
<html>
<body>

<br>
<table >
<tr><th>Men&uacute; Principal</th></tr>
<tr align=left>
<td>
<a href='consulta.php' target="menuder">Visualizar Tabla</a></td></tr>
<? if($user=="admin")
echo "<tr align=left><td><a href='consulta2.php' target="menuder">Configurar Tab
la</a></td></tr>";
echo "<tr align=left><td><a href='registro.php' target="menuder">A&ntilde;adir U
suario</a></td></tr>";
?>
<tr align=left><td>
<br>
<a href='salir.php'>Salir</a></td></td>
</table>
[PHP]
a ver dime que pasa con este codigo...
PD: en el archivo ini tiene que estar activado el VARIABLES GLOBALES ok...
el tag(<? ?>) y listo...

saludos
__________________
Cita:
El éxito se alcanza convirtiendo cada paso en una meta y cada meta en un paso :pensando:
Att...
Tu amigo Willy... :aplauso:
  #9 (permalink)  
Antiguo 17/09/2004, 15:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ese tal:
$_SESSION["autenticado"]="SI";

está de más como varaible de sesión si ya crean otras varaibels como el "user" o ahora una más extra del "nivel" de acceso .. Fijesen que no aporta nada (más que engrosar el tamaño de una sesión) .. es redundante, ya tienen otras variables que siempre se crean cuando el usuario se autentifica.

Un saludo,
  #10 (permalink)  
Antiguo 17/09/2004, 21:35
 
Fecha de Ingreso: septiembre-2004
Ubicación: Argentina
Mensajes: 49
Antigüedad: 13 años, 2 meses
Puntos: 0
Willjce gracias por tu voluntad, aunque sigue sin funcionar...tengo un par de consultas para hacerte:

en el código de más abajo, la variable de sesión a llamar sería $_SESSION['autenticado'] según como venía del login.php que me mandaste?? y el $USERD->tipo=$autenticado[0]; lo mismo??
otra: en login.php que función cumplen sesion_is_registered y session_register??

bueno, saludos amigo

//archivo valusu.php
<?
session_start();
if(empty($_SESSION['sai9001'])){
$aux=encode_url_simple("[email protected] el manejo de la [email protected]@1");
$aux="Location: index.php?error=true";
header($aux);
}
$USERD->tipo=$sai9001[0];
$USERD->nombre=$sai9001[1];
?>
  #11 (permalink)  
Antiguo 20/09/2004, 08:31
 
Fecha de Ingreso: septiembre-2004
Ubicación: Argentina
Mensajes: 49
Antigüedad: 13 años, 2 meses
Puntos: 0
El código funciona a las maravillas Will!!!!

Lo único que hay tener cuidado es cuando se presentan los datos en la tabla hay que poner las barras adelante...

echo "<tr align=left><td><a href=\'consulta2.php\' target=\"menuder\">Configurar Tabla</a></td></tr>";
echo "<tr align=left><td><a href=\'registro.php\' target=\"menuder\">A&ntilde;adir Usuario</a></td></tr>";

Muchas gracias comunidad phpera!!!

saludos
  #12 (permalink)  
Antiguo 20/09/2004, 11:01
Avatar de Willjce  
Fecha de Ingreso: diciembre-2003
Ubicación: Lima - Peru
Mensajes: 67
Antigüedad: 14 años
Puntos: 0
hola pscheve!!! bueno que bueno que te funcione el codigo que te di!! pero creo que tienes algunas dudas de lo que estas usando te lo voy a aclarar ok...

Código PHP:
//esto es en el archivo login.php
//mira aqui estoy haciendo el array en la variable de la sesion
$autenticado[0]=$get['tipo'];
$autenticado[1]=$get['pers_nombres']; 
//en el archico cabecera valusu.php
//estas variables los creo para no tener que llamar con $_SESSION["autenticado"][0] que vendria hacer los mismo que el tipo de usuario
//y nada mas
$USERD->tipo=$sai9001[0]; 
$USERD->nombre=$sai9001[1];
//y no te olvides que para llamar a las variables globales creadas se les llama:
global $USERD

echo $USERD->tipo
Código PHP:
//archivo valusu.php
<?
//aqui hago que se comiense la sesion... para todas las
//paginas php que tengas
session_start();  
//aqui hago la pregunta de que si la sesion 
//registrada conel nombre sai9001 no exista en el servidor por causas de que 
//se haya cerrado el explorador o que se haya coducado por la expiracion del cookie creada en el servidor
if(empty($_SESSION['sai9001'])){  
$aux=encode_url_simple("[email protected] el manejo de la [email protected]@1");
$aux="Location: index.php?error=true";
//hago un header con una variable que diga que hubo un error(seria mejor codificar la URL ok)
header($aux);
}
$USERD->tipo=$sai9001[0];
$USERD->nombre=$sai9001[1];
saludos
__________________
Cita:
El éxito se alcanza convirtiendo cada paso en una meta y cada meta en un paso :pensando:
Att...
Tu amigo Willy... :aplauso:
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 00:43.