Foros del Web » Programando para Internet » PHP »

Duda Con session

Estas en el tema de Duda Con session en el foro de PHP en Foros del Web. Buenas tardes: Tengo un sistema de autentificacion de usuarios basado en sessiones y me gustaría crear un código para restringir el acceso a cada página ...
  #1 (permalink)  
Antiguo 10/09/2005, 13:35
 
Fecha de Ingreso: marzo-2005
Mensajes: 53
Antigüedad: 12 años, 9 meses
Puntos: 0
Duda Con session

Buenas tardes:

Tengo un sistema de autentificacion de usuarios basado en sessiones
y me gustaría crear un código para restringir el acceso a cada página en funcion del tipo de usuario.
alguien me puede decir cual sería el código correspondinte a esto:

ver el campo TIPOusuario de la tabla usuarios y si el tipo de usuario es 2 dejarle ver la página, y si no lo es redirigirlo hacia otra.


muchas gracias por la ayuda.
  #2 (permalink)  
Antiguo 10/09/2005, 13:47
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
muestra algo de codigo... pero creo que tu mismo te has dado la explicacion...
__________________
3w.valenciadjs.com
3w.laislatv.com
  #3 (permalink)  
Antiguo 10/09/2005, 13:49
 
Fecha de Ingreso: marzo-2005
Mensajes: 53
Antigüedad: 12 años, 9 meses
Puntos: 0
esto es lo que tengo hecho:
<?
# --- INICIAMOS LOS INCLUDES --- #
include_once("../inc/config.php"); //Constantes de configuración
include_once("../session/session_mysql.php"); //Funciones para trabajar con sesiones las guarda en la base de datos
include_once("../inc/funciones.php"); //Funciones generales del portal
include_once("../inc/class.menu.php"); //Clases para montar menus;

# --- DEFINIMOS LA SESIÓN Y DECLARAMOS LAS VARIABLES DE SESIÓN --- #
session_start();
?>

<html><body>la pagina que se muestra</body></html>
  #4 (permalink)  
Antiguo 10/09/2005, 13:50
 
Fecha de Ingreso: marzo-2005
Mensajes: 53
Antigüedad: 12 años, 9 meses
Puntos: 0
lo que quiero hacer en codigo, es esta sintaxis:
si el usuario ha iniciado session y es de tipousuario 2 de la tabla usuarios, dejarle ver la página de abajo, y sino (es decir no esta logado) no dejarle ver la página.
  #5 (permalink)  
Antiguo 10/09/2005, 13:51
 
Fecha de Ingreso: marzo-2005
Mensajes: 53
Antigüedad: 12 años, 9 meses
Puntos: 0
se me olvido añadir:
si el usuario no esta logado, redirigirlo a esta otra
  #6 (permalink)  
Antiguo 10/09/2005, 13:55
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
puedes hacer una funcion que compruebe si el user cum los requisitos que pide cada parte de tu web...

yo por ejemplo, cuando el user hace el login, meto esos valores en SESSIONES, para tenerlos a mano en cualquier parte del code de la web


tengo una funcion que recoge esos valores, y comprueba que sean correctos, nombre, pass, y nivel de acceso...

si el nivel de acceso que yo pongo a cada parte de la web el igual o inferior la muestra, si el nivel necesacio es superior... muestra un error de acceso

osea, es diferenciar a los users:

usuario sin login = tipo 0
usuario con login = tipo 4
moderador = tipo 6
admin = tipo 10

por ejemplo..-.
__________________
3w.valenciadjs.com
3w.laislatv.com
  #7 (permalink)  
Antiguo 10/09/2005, 14:11
 
Fecha de Ingreso: marzo-2005
Mensajes: 53
Antigüedad: 12 años, 9 meses
Puntos: 0
sigo

todo esta montado, y solo necesito saber como llamar a esas sessiones y como hacer la session
  #8 (permalink)  
Antiguo 10/09/2005, 14:27
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 seeco
todo esta montado, y solo necesito saber como llamar a esas sessiones y como hacer la session
Mencionastes un montón de scripts .. pero no sabemos ni que variables de sesión creas o debes crear para definir tu "tipo de usuairo" o "nivel de acceso" ..

Tu ya gestionas tus usuarios en alguna Base de datos (tabla) o similar? .. tienes ya definido su campo correspondiente para "tipo de usuario"? .. de que tipo es? que dato guardas en el? ... como diferencias a tus usuarios? ...

En fin . debes aportar más datos si quieres más orientación.

Pero, de momento puedes ir viendo como trabajar con sesiones de PHP .. pero según "parece" ahí usas tu própio sistema de gestión de sesiones "session_mysql.php" que como te decía antes . .ni sabemos que funciones usa para definir una variable de sesión!!!!.

Un saludo,
  #9 (permalink)  
Antiguo 10/09/2005, 17:27
 
Fecha de Ingreso: marzo-2005
Mensajes: 53
Antigüedad: 12 años, 9 meses
Puntos: 0
Aclaración

Gracias a Todos por vuestra Ayuda.
Gracias Cluster por tu script que he visto por ahi y he votado.
Espero que me puedas ayudar con esto (no utilizo tu script en este caso)
1. el gestor de sessiones es el siguiente:

Código PHP:
<?
/* ------------------------------------------------------------------------
 * session_mysql.php
 * ------------------------------------------------------------------------
 * PHP4 MySQL Session Handler
 * Version 1.00
 * by Ying Zhang ([email protected])
 * Last Modified: May 21 2000
 *
 * ------------------------------------------------------------------------
 * TERMS OF USAGE:
 * ------------------------------------------------------------------------
 * You are free to use this library in any way you want, no warranties are
 * expressed or implied.  This works for me, but I don't guarantee that it
 * works for you, USE AT YOUR OWN RISK.
 *
 * While not required to do so, I would appreciate it if you would retain
 * this header information.  If you make any modifications or improvements,
 * please send them via email to Ying Zhang <[email protected]>.
 *
 * ------------------------------------------------------------------------
 * DESCRIPTION:
 * ------------------------------------------------------------------------
 * This library tells the PHP4 session handler to write to a MySQL database
 * instead of creating individual files for each session.
 *
 * Create a new database in MySQL called "sessions" like so:
 *
 * CREATE TABLE sessions (
 *      sesskey char(32) not null,
 *      expiry int(11) unsigned not null,
 *      value text not null,
 *      PRIMARY KEY (sesskey)
 * );
 *
 * ------------------------------------------------------------------------
 * INSTALLATION:
 * ------------------------------------------------------------------------
 * Make sure you have MySQL support compiled into PHP4.  Then copy this
 * script to a directory that is accessible by the rest of your PHP
 * scripts.
 *
 * ------------------------------------------------------------------------
 * USAGE:
 * ------------------------------------------------------------------------
 * Include this file in your scripts before you call session_start(), you
 * don't have to do anything special after that.
 */

$SESS_DBHOST $servidor;        /* database server hostname */
$SESS_DBNAME $basedatos;        /* database name */
$SESS_DBUSER $usuario;        /* database user */
$SESS_DBPASS $clave;            /* database password */

$SESS_DBH "";
$SESS_LIFE 14400;             //3600seg = 1hora   Antes: get_cfg_var("session.gc_maxlifetime");
                                                                      //14400seg = 4horas

function sess_open($save_path$session_name) {
    global 
$SESS_DBHOST$SESS_DBNAME$SESS_DBUSER$SESS_DBPASS$SESS_DBH;

    if (! 
$SESS_DBH mysql_pconnect($SESS_DBHOST$SESS_DBUSER$SESS_DBPASS)) {
        echo 
"<li>Can't connect to $SESS_DBHOST as $SESS_DBUSER";
        echo 
"<li>MySQL Error: "mysql_error();
        die;
    }

    if (! 
mysql_select_db($SESS_DBNAME$SESS_DBH)) {
        echo 
"<li>Unable to select database $SESS_DBNAME";
        die;
    }

    return 
true;
}

function 
sess_close() {
    return 
true;
}

function 
sess_read($key) {
    global 
$SESS_DBH$SESS_LIFE;

    
$qry "SELECT value FROM sessions WHERE sesskey = '$key' AND expiry > " time();
    
$qid mysql_query($qry$SESS_DBH);

    if (list(
$value) = mysql_fetch_row($qid)) {
        return 
$value;
    }

    return 
false;
}

function 
sess_write($key$val) {
    global 
$SESS_DBH$SESS_LIFE;

    
$expiry time() + $SESS_LIFE;
    
$value addslashes($val);

    
$qry "INSERT INTO sessions VALUES ('$key', $expiry, '$value')";
    
$qid mysql_query($qry$SESS_DBH);
    
    if (! 
$qid) {
        
$qry "UPDATE sessions SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " time();
        
$qid mysql_query($qry$SESS_DBH);
    }
    
//echo $qry."<br>";

    
return $qid;
}

function 
sess_destroy($key) {
    global 
$SESS_DBH;

    
$qry "DELETE FROM sessions WHERE sesskey = '$key'";
    
$qid mysql_query($qry$SESS_DBH);

    return 
$qid;
}

function 
sess_gc($maxlifetime) {
    global 
$SESS_DBH;

    
$qry "DELETE FROM sessions WHERE expiry < " time();
    
    
$qid mysql_query($qry$SESS_DBH);
    return 
mysql_affected_rows($SESS_DBH);
}

session_set_save_handler(
    
"sess_open",
    
"sess_close",
    
"sess_read",
    
"sess_write",
    
"sess_destroy",
    
"sess_gc");
?>
y tengo una base de datos con tabla usuarios donde hay un campo llamado tipousuario que contiene 4 elemento.

Me gustaría que alguien me enseñase es a hacer lo siguiente:
meter un código en unas cuantas páginas de mi web, q permita restringir el acceso: si un usuario no esta registrado o no pertenece al nivel 3 (con posibilidad de meter mas de un nivel), no vea el contenido de la página y sea redirigido a una de registro o solicitud de cambio de nivel al nivel que le permita ver dicho contenido.

Gracias.

Última edición por Cluster; 10/09/2005 a las 17:34
  #10 (permalink)  
Antiguo 10/09/2005, 17:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. ya sabes usar esa psudo-classe (grupo de funciones) para gestionar sesiones sobre Mysql? ... Supongo que tendrá alguna documentación de uso dicho código? ..

Por encima se podría "adivinar" como funciona dicho código .. pero sería mejor que localizases la web oficial del autor donde supongo tendrá un manual y ejemplos de uso.

Supongo que será algo tipo:
Código PHP:
sess_open("no_se_que_valor?""nombre_sesion");
// definir una variable de "sesion" según ese código:
sess_write("nombre_tu_variable""valor"); 
lo mismo con la función sess_read() para leer una de tus variables de sesion.

Por lo demás .. ya que dices haber visto el código de Autentificator .. realmente es lo que necesitas en este caso por lo menos su funcionamiento básico.

Fijate que en el .. defino al autentificarse el usuario las variables de sesión básicas para luego leerlas en todo escript y así validarlo por estas varaibles.

En mi caso Autentificator hace:
Código PHP:
// tratamiento "nativo" de uso de sesiones de PHP
$_SESSION['id_usuario'] = $id_usuario
tu .. tendrás que usar tu función:
Código PHP:
 sess_write("id_usuario",$id_usuario) ... 
Para las validaciones harás cosas tipo:
Código PHP:
if (empty(sess_read("id_usuario")){
// tu usuario no está autentificado .. no es un usuario registrado.
exit;

o añadiendo combinaciones con el resto de variables que incorpores a tu sesión .. como el del nivel de usuario y demás ..

Un saludo,
  #11 (permalink)  
Antiguo 10/09/2005, 18:17
 
Fecha de Ingreso: marzo-2005
Mensajes: 53
Antigüedad: 12 años, 9 meses
Puntos: 0
Gracias por la ayuda

Cluster, te agradezco la ayuda a este problema que por fin he podido arreglar.

Pero solo me queda una duda que espero que tu me puedas ayudar:

cuando los usuarios pongan la contraseña y pinchen en entrar, como podría hacer para redirigirlos hacia una página o otra en funcion de su nivel de acceso establecido en el campo Tipousuario de la tabla usuarios?

Existe alguna funcion que podría utilizar?
Gracias.

AÑADIDO DESPUES:

para ser más preciso, necesito modificar esta parte del codigo de validación de usuarios para poder redirigirlos hacia una pagina distinta en funcion de su nivel de acceso, este codigo es la action del form de acceso con contraseña:

case "registro":
$usuario = $_REQUEST["fUsuario"];
$pass = $_REQUEST["fPassword"];

$sql = "SELECT id, usuario, nombre, apellidos, empresa, tipousuario, provincia, ccaa, idioma ".
"FROM usuarios ".
"WHERE usuario='".$usuario."' AND password='".$pass."'";
//echo $sql;
$rsSql = mysql_query($sql);
if ($myRow=mysql_fetch_array($rsSql)){
session_register("iduser");
session_register("ses_nombre");
session_register("ses_usuario");
session_register("ses_empresa");
$iduser = $myRow["id"];
$ses_user = $myRow["tipousuario"];
$ses_usuario = $myRow["usuario"];
$ses_nombre = $myRow["nombre"].' '.$myRow["apellidos"];
$ses_empresa = $myRow["empresa"];
$ses_prov = $myRow["provincia"];
$ses_ccaa = $myRow["ccaa"];
$idioma = $myRow["idioma"];
}
echo '<body onLoad="window.open(\'index.php\',\'_top\')"></body>';
break;

Última edición por seeco; 10/09/2005 a las 18:29
  #12 (permalink)  
Antiguo 10/09/2005, 18:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm pero ese código que pusistes último (recuerda usar la función "PHP" del foro para que se vea coloreado tu código) .. no tiene nada que ver con el otro problema con el uso de esa "psudo-classe" sobre manejo de sesiones en una BD.. o no?.

Bueno .. sea como sea .. Redireccionar en PHP lo puedes hacer con:

Código PHP:
header ("Location: dondetengasqueir.php");
exit; 
pero ahí ese código abre una ventan O_o' .. .así que ya no sé lo que realmente quieres hacer .. Intenta centrarte, no mezclar cosas y exponer todos los antecedentes de tu caso.

El "donde" tengas que redireccionar .. yo no sé si tu en tu BD de gestion de usuarios guardas el URL suyo .. o lo compones con parte del nombre del usuario u otra propiedad del mismo .. (eso ya es cosa tuya).

Y OJO! .. no deberías usar session_register() sino el array $_SESSION .. Te invito a leer (desde el principio a fin) .. como trabajar con sesiones (las de PHP Nativas) en:
www.php.net/session

Usar por un lado variables "superglobales" como $_REQUEST y por otro session_register() te va a dar problemas si tocas con servidores con la directiva (php.ini) register_globals a OFF (lo cual suele ser muy común por seguridad que estén así).

Un saludo,
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 08:11.