Crear sesiones para varios roles con PHP para una intranet

En el siguiente apartado vamos a explicar como crear varios roles para una intranet usando sesiones en PHP.

Empezaremos explicando los conceptos básicos y después realizaremos un caso práctico paso a paso.

Conceptos básicos de las sesiones en PHP
  • Las sesiones son un mecanismo para almacenar información en el servidor que permanecerá entre un acceso y otro.
  • Al conectarse un usuario se le asigna un identificador de sesión con el que se asociará la información.
  • Cuando se inicia una sesión en PHP comprueba automáticamente si ya existía alguna, en el caso que exista recupera toda la información de la sesión.
  • A la información que se almacena en una sesión se le llama variable de sesión.
  • Se crea una sesión con la función session_start().
  • El vector $_SESSION almacena las variables de sesión.
  • Para destruir los datos asociados a una sesión se utiliza la función session_destoy().
Caso práctico para crear sesiones para diferentes roles de usuarios

Para comenzar a explicar este ejemplo definiremos tres roles diferentes aunque podemos definir todos los que queramos.

Una vez tengamos claro cuáles van a ser esos roles, en nuestro caso serán: Director, profesor y alumno comenzaremos por crearnos una tabla en nuestra base de datos, en este caso nosotros utilizaremos la base de datos MySQL.

ejemplo sesiones php

Nuestra tabla almacenada en la base de datos deberá tener un usuario y contraseña como valores obligatorios y como valores opcionales podemos incluir nombre y apellidos. Nuestro ejemplo usará estos datos pero vosotros pondréis los campos que os interesen, la restricción es que tiene que tener un identificador que sea clave primaria, en nuestro caso será usuario y una contraseña para confirmar el acceso a la sesión.

Como tenemos tres roles crearemos tres tablas diferentes llamadas directores, profesores y alumnos, también se podría incluir los tres roles en una tabla única y crear un campo que se llamara estado por ejemplo para indicarle su rol, pero nosotros lo haremos separándolas totalmente, cada uno que lo haga de la forma que más se adapte a su sistema.

Vuelvo a comentar el tema de los campos porque lo más importante es tenerlo todo claro antes de comenzar.

Necesitamos que un campo sea clave primaria, lo que me refiero con esto es que este campo no se va a poder repetir, hablando más claro si nuestra clave primaría es usuario (recomendado) solo va a poder existir un usuario con este nombre por lo tanto no podrán haber dos usuarios con el mismo nombre y no tendremos problemas a la hora de manejar nuestras sesiones.

Vamos a usar dos archivos el primero contendrá un formulario que tendrá como objetivo enviar el nombre del usuario y la contraseña.

Este ejemplo funcionará bien se tenemos la certeza que no se va a llamar un usuario de la misma manera en los tres roles. Por lo tanto una restricción de nuestro sistema sería que un usuario tiene que ser único y si existe en un rol no puede existir en otro. Si se va a crear un registro para que los usuarios se puedan registrar libremente una solución sería antes de registrar un usuario en un rol realizar una consulta sobre las tres tablas y comprobar que no existe en ninguna de ellas.

El segundo archivo será donde comprobemos si el usuario está registrado en la base de datos.

Bien, una vez que lo tenemos claro vamos a la implementación.

Ahora creamos un formulario para poder introducir el usuario y la contraseña.

Primer archivo:

Aquí visualizamos el código de un formulario común donde a través del método POST mandaremos el valor de los campos usuario y password a nuestro archivo manejadorsesiones.php.

 
<form  action="manejadorsesiones.php" method="post">
 
   <input name="usuario" type="text" placeholder="Usuario" />
 
   <input name="password"  type="password" placeholder="Contraseña" />
 
   <input type="submit" value="Acceder" class="enviar">
 
</form>

Para que funcione el proceso deberemos insertar un par de alumnos, profesores y directores directamente desde MySQL ya que no tenemos en nuestro caso un formulario de registro donde poder insertar usuarios y necesitamos ejemplos para ver que el sistema de autentificación funciona.

Una vez tengamos la tabla creada la conectamos desde nuestro código PHP. (Esta parte no la comentamos, pero si tenéis alguna duda comentar en el artículo y os responderé con mucho gusto).

Segundo archivo (en nuestro caso manejadorsesiones.php):

 
//Recibimos las dos variables
$usuario=$_POST["usuario"];
$password=$_POST["password"];
 
/* Realizamos una consulta por cada tabla para buscar en que tabla se encuentra 
el usuario que está intentando acceder */
$alumno = mysql_query("SELECT * FROM alumnos WHERE alumno = '$usuario' AND password = '$password'");
$profesor = mysql_query("SELECT * FROM profesores WHERE profesor = '$usuario' AND password = '$password'");
$director = mysql_query("SELECT * FROM directores WHERE director = '$usuario' AND password = '$password'");
 
/* Sabemos que en el caso que exista el usuario se encontrará en una de estas 
tres tablas, por lo tanto se guardará en alguno de nuestras tres variables 
que guardan nuestra consulta */
 
/* Ahora comprobamos que variable contiene al usuario*/
if(mysql_num_rows($alumno) > 0) 
{
    /* Si entra en este if significa que el que intenta acceder es un alumno, 
    por lo tanto le creamos una sesión */
    session_start();
 
    $_SESSION['alumno']="$usuario";
 
    /* Nos dirigimos al espacio de los alumnos usando header que nos 
    redireccionará a la página que le indiquemos */
    header("Location: alumnos/espacioalumno.php");
 
    /* terminamos la ejecución ya que si redireccionamos ya no nos interesa 
    seguir ejecutando código de este archivo */
    exit(); 
}
 
/* Ahora comprobamos si el que intenta acceder es un profesor */
else if(mysql_num_rows($profesor) > 0) 
{
    session_start();
    $_SESSION['profesor']="$usuario";
    header("Location: entrenador/espacioentrenador.php");
    exit(); 
}
 
//comprobamos si es un director el que intenta abrir la sesión
else if(mysql_num_rows($director) > 0) 
{
    session_start();
    $_SESSION['director']="$usuario";
    header("Location: administrador/espacioadministrador.php");
    exit();
} 
else 
{
   /* Si no el usuario no se encuentra en ninguna de las tres tablas 
   imprime el siguiente mensaje */
   $mensajeaccesoincorrecto = "El usuario y la contraseña son incorrectos, por favor vuelva a introducirlos.";
   echo $mensajeaccesoincorrecto; 
}

Cuando entre en un if crearemos una sesión en PHP que nos permitirá acceder a zonas restringidas para ciertos roles, vamos a ver por ejemplo el proceso si entra en el if del alumno.

El comando header(“Location: alumnos/espacioalumno.php”); nos dirigirá a dicha ruta, una vez accedamos a espacioalumno.php solo podremos leerlo si efectivamente somos un alumno, esto se comprueba colocando el siguiente código PHP en la parte superior del archivo.

//abrimos la sesión
session_start();
 
//Si la variable sesión está vacía
if (!isset($_SESSION['alumno'])) 
{
   /* nos envía a la siguiente dirección en el caso de no poseer autorización */
   header("location:../index.php"); 
}

Para que veamos cómo cambia al acceso a un área restringida de un alumno a un profesor os pongo como sería su código (lo único que debemos hacer es cambiar alumno por profesor):

 
//abrimos la sesión
session_start();
 
//Si la variable de sesión profesor está vacía
if (!isset($_SESSION[profesor])) 
{ 
    //nos envía al inicio
    header("location:../index.php"); 
}

Este código se puede poner en los archivos PHP que queramos tener protegidos.

Tenemos una sesión creada pero cuando ya no se vaya a usar hay que destruir la sesión, para ello deberemos eliminar la sesión una vez el usuario se desconecta, por lo tanto se puede incluir un botón de cerrar sesión que al pulsarlo nos dirigirá a otro fichero, por ejemplo cerrar-sesion.php donde se encargará de destruir la sesión con el siguiente código:

<?php 
session_start();
 
/* comprobamos que un usuario registrado es el que accede al archivo, 
sino no tendría sentido que pasara por este archivo */
if (!isset($_SESSION[alumno])) 
{
    header("location:../index.php"); 
}
 
/* usamos la función session_unset() para liberar la variable 
de sesión que se encuentra registrada */
session_unset($_SESSION[alumno]);
 
// Destruye la información de la sesión
session_destroy();
 
//volvemos a la página principal
header("location:../index.php"); ?>

Iván Martínez

Ingeniero Informático apasionado por el mundo del desarrollo WEB. Me gusta caminar por este mundo lleno de tecnologías y día a día aprender cosas nuevas como el doctor Frankenstein ¡dadme cosas para experimentar!

53 comentarios sobre “Crear sesiones para varios roles con PHP para una intranet

  • el Abr 6, 2016 a las 4:02 am
    Permalink

    corrígeme si me equivoco, en la base de datos creo las tres tablas y a cada una le creo los campos usuario y contraseña? o creo una tabla aparte para eso?

    Respuesta
    • el Abr 7, 2016 a las 10:16 pm
      Permalink

      Hola, en el caso prático del ejemplo se crea el usuario y la contraseña en las tres tablas para los tres roles diferentes.

      De todas maneras existen muchas formas de hacerlo dependiendo del diseño de tu base de datos y la funcionalidad de tu aplicación, otra forma interesante de hacerlo es crear una tabla llamada USUARIOS donde se almacenase todos los usuarios de la aplicación y en ella que existiera un campo llamado por ejemplo “tipo_rol” donde indicará su rol así la tabla tendría tres campos (usuario, contraseña, tipo_rol) siendo usuario clave primaria o incluyendo un identificador nuevo.

      A la hora de redirigir a una parte de la intranet u a otra solo tendrías que preguntar cual es su rol.

      Saludos!

      Respuesta
  • el Abr 14, 2016 a las 6:46 pm
    Permalink

    Hola, soy nuevo en esto, como podria implementar lo de los roles de usuarios? tengo una tabla usuarios, donde tengo su usuario, contraseña y tipo de perfil, la cual tipo de perfil es una llave foranea hacia la tabla perfiles

    Respuesta
  • el Abr 16, 2016 a las 2:45 pm
    Permalink

    La estructura de la base de datos depende de los requerimientos y funcionalidades de la aplicación, dependiendo de esto se puede hacer de una manera u otra, por lo que has dicho tienes una tabla llamada usuarios donde me imagino que el usuario será clave primaria, esta tabla tiene un campo que es tipo de perfil, este campo se alimenta de los valores de la tabla tipo de perfil donde me imagino que será una tabla con dos campos, el valor y la descripción donde el valor será la clave primaria.

    El planteamiento me parece correcto, en el campo tipo_perfil de la tabla usuario se almacenará el valor del rol, no la descripción, si en algún momento deseas obtener la descripción del rol tendrás que hacer una SELECT con un LEFT JOIN comparando los identificadores de perfil de las dos tablas.

    A partir de aquí si deseas más información tendrás que especificar un poco más que es lo que quieres.

    Saludo!

    Respuesta
    • el Abr 16, 2016 a las 6:40 pm
      Permalink

      Mi pregunta es, como aplico el tipo de rol en el segundo archivo para que me direcccione a una pagina especifica dependiendo el tipo de rol?

      Respuesta
  • el Abr 16, 2016 a las 9:13 pm
    Permalink

    Hola de nuevo, pues de la siguiente forma:
    Una vez recibas del formulario el usuario y la contraseña deberas hacer una SELECT sobre la tabla usuarios para ver si el usuario existe en dicha tabla como:
    SELECT perfil_rol FROM usuariosbWHERE usuario= ‘$usuario’ AND password = ‘$password’
    Esta consulta nos devolverá en el caso que exista el usuario y coincida la contraseña el tipo de rol que es mediante el campo perfil_rol, una vez tengamos el perfil_rol solo es comprobar de que tipo es poniendo if o switch, como por ejemplo:
    if($perfil_rol ==1)
    { va a la página1}

    if($perfil_rol ==2)
    { va a la página2}

    Saludos!

    Respuesta
  • el Abr 22, 2016 a las 3:40 am
    Permalink

    Amigo, saludos y gracias por responder, lo hice ahora el problema que tengo es que me dice este error ” mysql_num_rows() expects parameter 1 to be resource, boolean given in ” en los tres if que crees tu que pueda hacer? y si sabes que quiere decir esto te agradecería si lo explicaras brevemente

    Respuesta
  • el Abr 22, 2016 a las 5:18 pm
    Permalink

    Al hacer la consulta (SELECT…) la función mysql_num_rows() te devuelve el número de tuplas que ha devuelto la SELECT, para que funcione correctamente necesitas pasarle como parámetro el array que contiene la consulta, en el caso del artículo sería: mysql_num_rows($profesor)

    También decirte que no necesitas obligatoriamente utilizar la función mysql_num_rows() para comprobar si ha encontrado algún resultado, para saber si un array está vacio siemplemente puedes usar la función de PHP empty como:
    if(empty($profesor)) { }
    Saludos!

    Respuesta
    • el Dic 13, 2016 a las 10:15 pm
      Permalink

      No logro comprender el error y la solución que usted da, soy nuevo en esto y quisiera saber si existe otra forma de explicar el error: Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

      Respuesta
      • el Feb 7, 2017 a las 5:18 pm
        Permalink

        Lo que te está diciendo es que la función de MySQL “mysql_num_rows” necesita un parámetro, y este parámetro debe de ser el resultado de la consulta, por lo tanto comprueba primero si falla tu consulta SQL, un saludo.

        Respuesta
  • el Jul 18, 2016 a las 3:28 am
    Permalink

    Hola
    Me sale perfecto, pero presento el siguiente problema:
    Tengo 3 alumnos y cuando inicio sesión deseo que al alumno le aparezcan sus datos de inicio de sesión, el detalle es que siempre muestra la información del alumno de la primera fila, aunque haya iniciado sesión con el tercer alumno.

    Como puedo solucionarlo?
    Saludos

    Respuesta
  • el Jul 19, 2016 a las 9:16 pm
    Permalink

    Ya lo solucioné.
    Ahora como puedo validar esto en ajax? o en java para no ser redireccionado a manejadorsesiones.php y que ahi muestre el error, sino desde el mismo login, que valide los errores.

    Respuesta
  • el Ago 11, 2016 a las 7:08 pm
    Permalink

    Hola esta excelente el tutorial tengo una consulta
    Tengo una tabla que se llama
    tblusuarios
    En esta tengo varios campos entre ellos usuIdentificacion, usuTipoUsuario, usuContraseña
    Tengo dos tipos de usuario Administrador y Cajero quiero autenticar al usuario si es Administrador lo envía a una página y si es Cajero lo envié a otra.

    Ejemplo
    $doc $tipousuario $pass
    usuIdentificacion usuTipoUsuario usuContraseña
    123456789 Administrador 1234
    1234567 Cajero 3333

    $sql = “SELECT * FROM tblusuarios WHERE usuIdentificacion = ‘$doc’ and usuTipoUsuario = ‘$tipousuario’ and usuPassword = ‘$pass’

    Con eso autentico al usuario
    Pero quiero saber si es Administrador o Cajero para poderlo redireccionar

    Respuesta
    • el Ago 13, 2016 a las 9:51 pm
      Permalink

      Hola, por lo que veo ya lo tienes casi. Te pongo los pasos a seguir:

      1-El usuario accede mediante un formulario introduciendo el usuario/contraseña.

      2-Recogemos las variables del formulario y realizamos la consulta, en la consulta recogemos el contenido de los campos de la tabla en el caso de que traiga algún resultado sino el usuario o la contraseña serán incorrectas y se mostrará el mensaje de aviso al usuario.

      La consulta que has puesto no es correcta ya que en la parte del WHERE solo tienes que comparar el usuario y la contraseña, no el tipo, quedaría de la siguiente manera:

      $sql = “SELECT * FROM tblusuarios WHERE usuIdentificacion = ‘$doc’ and usuPassword = ‘$pass’”;

      3-Una vez que sepamos que el usuario existe en nuestra tabla nos traemos las variables de usuIdentificacion y usuTipoUsuario.

      4- Creamos una sesión con el nombre del usuario:
      $_SESSION[‘usuario’]=”$usuario”;

      5- En el último punto comprobamos el valor de usuTipoUsuario y hacemos un if, si es Administrador ves a una página sino ves a la otra usando:
      header(“Location: tuRuta.php”);

      Saludos!

      Respuesta
  • el Ago 14, 2016 a las 7:50 pm
    Permalink

    excelente tengo un problema al tener mas de 10 usuarios no crearemos 10 paginas con datos de ese usuario. mi problema es como asignar un id para que cuando inicie abra con los datos solo de ese usuario

    $alumnos = mysql_query(“SELECT * FROM alumnos WHERE alumno = ‘$usuario’ AND password = ‘$password'”);
    if(mysql_num_rows($alumno) > 0)
    {
    session_start();
    $_SESSION[‘alumno’]=”$usuario”, $id;

    header(“Location: alumnos/espacioalumno.php”);

    exit();
    }

    Respuesta
    • el Ago 16, 2016 a las 8:28 pm
      Permalink

      Hola Edu, muy sencillo (en el caso que sea la misma página para los 10 usuarios y únicamente cambie la información a visualizar), en la página donde gestionamos el usuario que accede a la aplicación (login) creamos una sesión:
      $_SESSION[‘alumno’]=”$usuario”;

      Al crear la sesión nos guardamos información que después utilizaremos.

      Después redireccionará a la página:
      header(“Location: alumnos/espacioalumno.php”);

      En este archivo comprobamos si existe una sesión y en ese caso afirmativo usamos la variable guardada en sesión: $_SESSION[‘alumno’]

      Después que identifiquemos que usuario es entonces es cuando realizamos las correspondientes consultas SQL obteniendo los datos, (lógicamente tendrás que poner en la WHERE de la consulta al usuario conectado para que solo te salga un resultado).

      Saludos!

      Respuesta
  • el Ago 31, 2016 a las 9:10 pm
    Permalink

    Buenas Tardes,

    En mi caso el id y la contraseña se encuentran en un tabla y el tipo de usuario se encuentra en otra tabla como podria hacer la validacion?

    Gracias

    Respuesta
    • el Sep 2, 2016 a las 11:31 am
      Permalink

      Hola, usando la instrucción de SQL JOIN.

      Respuesta
  • el Sep 6, 2016 a las 5:10 pm
    Permalink

    Muy bien explicado!!! voy a ponerlo en practica, tenia la idea pero no sabia como ejecutarla bien . Gracias!!!

    Respuesta
  • el Sep 26, 2016 a las 7:55 pm
    Permalink

    Excelente aporte, una consulta, cómo les asigno a cada usuario permisos de lectura, escritura, agregar, eliminar?

    Digamos Director: todos los permisos
    Profesor: Ver y escribir
    Alumno: ver

    Gracias

    Respuesta
  • el Oct 4, 2016 a las 6:12 pm
    Permalink

    Hola Ing de que manera se conecta a la base de datos de un servidor externo donde están las tablas del sql ? Como configuro los roles para que cada quien solo puedan acceder a una carpeta y negar permisos de acceder a otras ?

    Respuesta
  • el Nov 5, 2016 a las 8:27 pm
    Permalink

    Amigo tengo un problema,tengo 2 roles uno es de usuario y el otro es de administrador,cuando inicio sesión como usuario ingresa normal,y abro otra pestaña para ingresar como administrador y ingresa correctamente pero cuando vuelvo a la pestaña de usuario la sesión del usuario se reemplaza por la del administrador,que podría hacer?
    Cordial Saludo

    Respuesta
  • el Nov 15, 2016 a las 6:06 pm
    Permalink

    Hola, quisiera consultarte lo siguiente, estoy pensando crear una pagina web donde los clientes ingresen con su numero de RUC y puedan ver sus facturas, soy nueva en esto, te agradecería que me respondas.

    Respuesta
  • el Dic 2, 2016 a las 5:22 am
    Permalink

    Gracias, con esto ya tengo la idea para implementarlo en un pequeño sistema que requiere mostrar diferentes páginas en función del tipo de usuario. Bien explicado el concepto base.

    Respuesta
  • el Feb 2, 2017 a las 4:33 pm
    Permalink

    Hola, quería hacer una consulta. Tengo dos paginas : (administrador.php, usuario.php). si me logueo como administrador entro a la pagina “administrador” y si ingreso como usuario entro a la pagina “usuario” pero si ya he iniciado session con alguno de los dos tipos de usuario y voy al navegador y cambio el archivo me ingresa al otro usuario sin necesidad de loguearme como podría controlar esto. Por Ejemplo

    1. ingreso como administrador
    localhost/login/administrador.php, pero si cambio esta parte /usuario.php en el navegador me ingresa al otro archivo sin necesidad de loguearme como usuario. Gracias

    Respuesta
    • el Feb 7, 2017 a las 5:05 pm
      Permalink

      Hola, tienes que crear una sesión diferente para cada rol, y cuando vayas a entrar a algún archivo primero comprobar si la sesión pertenece a dicho rol. En el artículo se explica. Saludos.

      Respuesta
  • el Mar 2, 2017 a las 7:56 pm
    Permalink

    Hola, quiero hacer una consulta realice los pasos tal cual , solo que al momento e ingresar el usuario y password…me envia el siguente error:

    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\…

    puede ayudarme…Gracias

    Respuesta
    • el Mar 11, 2017 a las 11:07 am
      Permalink

      Revisa que la consulta SQL devuelve datos. Saludos.

      Respuesta
  • el Abr 7, 2017 a las 6:46 pm
    Permalink

    buen dia ingeniero IVAN
    BUEN TUTORIAL muy claro
    COMO PUEDO IMPLEMENTAR esta logo por roles en MYSQLI ya que como usted sabe ya la MSQL a la fecha ya se remplazo por MSQLI
    gracias.
    es muy importante para mi su respuesta
    desde COLOMBIA

    Respuesta
  • el Abr 7, 2017 a las 6:56 pm
    Permalink

    SIGUIENDO CON LO ANTERIOR
    estoy estudiando tegnologia en analisis y desarrollo de sistemas de informacion.
    ya termine la etapa lectiva en el SENA y ahora me encuentro diligenciando unas practicas pero solo me enseñaron a iniciar sesion con un solo usuario en php y MYSQLI ya lo he hecho pero hasta ahora no encontrado informacion en internet para inicio session start por roles me gustaria contar con su ayuda para lograr tan importante uso para el sistema de informacion por roles. gracias

    Respuesta
  • el Jul 5, 2017 a las 10:31 pm
    Permalink

    exelente este ejemplo me sirvio muchooo necesitaba algo como esto , aunque lo estoy trabajando en postgres sql… igual gracias por este gran ejemplo.!

    Respuesta
  • el Jul 5, 2017 a las 10:37 pm
    Permalink

    una pregunta si el usuario se encuentra repetido que mensaje debería mostrar? osea si los usuarios estan en ambas tablas no muestra ningun msj?… entra normal?…

    Respuesta
    • el Jul 13, 2017 a las 12:24 pm
      Permalink

      Hola, en este caso práctico se entiende que no puede estar repetido ya que a la hora de inserción de usuarios se comprobaría antes de insertar algún usuario si ya existe en algunas de las tres tablas. Si en tu sistemas dejas que los nombres se repitan entonces una solución es que el usuario antes de loguearse escoja a que espacio quiere acceder.

      El ejercicio esta hecho de esta manera pero también puedes usar una única tabla donde los diferentes roles pueden estar declarados en un campo de esa tabla. Por ejemplo campo rol donde tendrá tres estados (D, P, A)
      y a través de este campo sabrás donde redireccionar.

      Saludos.

      Respuesta
  • el Jul 11, 2017 a las 4:20 pm
    Permalink

    Hola disculpa tengo una duda me podrías ayudar.
    Tengo que una pagina de inicio donde tengo un login con un usuario y contraseña lo que quiero es extraer el valor del usuario y guardarlo en un campo de una tabla en una base de datos.

    Respuesta
    • el Jul 13, 2017 a las 12:36 pm
      Permalink

      Hola Martín, una vez tengas el valor del usuario únicamente tienes que realizar un INSERT sobre la tabla de tu base de datos. Saludos.

      Respuesta
  • el Ago 7, 2017 a las 6:46 pm
    Permalink

    Hola amigo soy nuevo en esto, tengo problemas porque me sale este mensaje Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C….
    Serias tan amable de pasarme tus archivos completos para poder ver como haces la conexión y lo demás por favor.

    Respuesta
    • el Ago 9, 2017 a las 12:00 pm
      Permalink

      No tengo ahora mismo los archivos pero el Warning que te da es porque el resultado de la SELECT no ha devuelto ninguna tupla. Saludos.

      Respuesta
  • el Ago 8, 2017 a las 6:22 pm
    Permalink

    hola y si un alumno quiere entrar a un link de un profesor, me imagino que no le dejaria entrar por que no esta registrado el alumno a la tabla profesor o se tendria que hacer una condición, y otra duda si un usuario ya registrado y que ya inicio sesión digamos lo redirecciona a alumnos/espacioalumno.php… si el alumno trata de ingresar a la pagina de index.php… en este caso sale de la sesion. lo que yo quiero saber como hacer para que no pueda entrar a a index.php ya que tiene sesion quiero que me redirecciones a alumnos/espacioalumno.php ese es mi duda es que yo ando praticando ya pude hacer lo que me dijiste y pues quisiera saber como se procede gracias.

    Respuesta
  • el Ago 9, 2017 a las 12:19 pm
    Permalink

    Hola Faustino, te voy contestando:

    Pregunta 1: un usuario no podrá acceder al espacio del profesor porque en la clase manejadorsesiones.php se crea una sesión diferente por cada rol, en el caso del profesor será: $_SESSION[‘profesor’], por lo tanto un alumno nunca tendrá una sesión creada de rol profesor, así que no podrá acceder a ficheros de profesores siempre y cuando se tenga la restricción de: if (!isset($_SESSION[profesor]))…. al principio de los archivos del profesor.

    Pregunta 2: realiza una condición que compruebe que la variable sesión no este vacía, y posteriormente ya realizas la redirección.

    Saludos.

    Respuesta
  • el Sep 25, 2017 a las 6:23 pm
    Permalink

    ivan he intentado hacerlo pero no se como hacer el login de dos usuarios un administrador y un usuario a un help desk pero no se que hacer y no se si me puedas ayudar gracias

    Respuesta
  • el Oct 20, 2017 a las 10:00 pm
    Permalink

    hola buenas tarde
    necesito ayuda para realizar una consulta de dos tablas usuario y rol ,desde el nombre del usuario dar clic y que me muestre los roles de cada uno de esos usuario hay con php incluido gracias.

    Respuesta
    • el Oct 31, 2017 a las 9:07 am
      Permalink

      Hola, no se muy bien lo que quieres decir pero si necesitas realizar una consulta que obtenga los datos de la tabla usuario y rol puedes usar la sentencia SQL “JOIN”, de esta manera obtendrás por una parte los campos de un usuario en concreto y además la información de su rol. Pero siempre tendrás que tener relacionadas las tablas usuario ( con un id del rol) con la tabla del rol (descripción del rol). Saludos.

      Respuesta
  • el Nov 26, 2017 a las 2:18 pm
    Permalink

    quisiera tener un rol de administrador el cual me permita asignar roles a cualquier usuario nuevo que agregue podría dar cualquier nombre

    Respuesta
  • el Feb 2, 2018 a las 8:51 pm
    Permalink

    como haces que la session el usuario profesor enga acceso a la zona de estudiante pero estudiante no a la zona profesor ?

    Respuesta
    • el Feb 3, 2018 a las 8:43 pm
      Permalink

      Hola, al entrar en el archivo php de la zona del estudiante debes comprobar si se ha abierto una sesión con el usuario o con el “profesor” y si es así lo dejas pasar, una vez dentro ya tienes que gestionar que puede hacer un rol y que puede hacer el otro.

      En la zona del profesor solo se podrá entrar como antes, con una sesión abierta únicamente del profesor y no del estudiante.

      Saludos.

      Respuesta
  • el Feb 3, 2018 a las 2:37 am
    Permalink

    como realizo sesiones para dos usuarios diferentes y que me redireccione a paginas diferentes con mysqli

    Respuesta
    • el Feb 3, 2018 a las 8:52 pm
      Permalink

      Si te he entendido bien lo que quieres hacer se explica en el artículo.

      Crea dos roles diferentes (cada uno con un nombre de sesión diferente) y con la siguiente función lo rediriges dependiente si es un rol u otro :

      header(“Location: tupagina.php”);

      Saludos.

      Respuesta
  • el May 21, 2018 a las 3:12 am
    Permalink

    Ayuda…

    ( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\inicio de varias sesiones\manejadorsesiones.php on line 18
    Call Stack
    # Time Memory Function Location
    1 0.0034 377008 {main}( ) ..\manejadorsesiones.php:0
    2 0.0118 383216 mysql_num_rows ( ) ..\manejadorsesiones.php:18

    ( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\inicio de varias sesiones\manejadorsesiones.php on line 36
    Call Stack
    # Time Memory Function Location
    1 0.0034 377008 {main}( ) ..\manejadorsesiones.php:0
    2 0.0123 383384 mysql_num_rows ( ) ..\manejadorsesiones.php:36

    ( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\inicio de varias sesiones\manejadorsesiones.php on line 45
    Call Stack
    # Time Memory Function Location
    1 0.0034 377008 {main}( ) ..\manejadorsesiones.php:0
    2 0.0127 383384 mysql_num_rows ( ) ..\manejadorsesiones.php:45
    El usuario y la contraseña son incorrectos, por favor vuelva a introducirlos.

    Respuesta
    • el May 24, 2018 a las 1:33 pm
      Permalink

      Hola, la función mysql_num_rows() está dando fallo porque el parámetro que le estás pasando está vacío, osea que existe algún error en la consulta que has realizado. Un saludo.

      Respuesta
  • el Jun 28, 2018 a las 9:15 pm
    Permalink

    hola , en esta aparte del codigo : $_SESSION[‘alumno’]=”$usuario”;
    que es lo que guarda?
    use tu codigo y me funciona perfecto adaptado a mi proyecto pero quiero usar las sessiones para tomar los datos del usuario (nombre y numero de control) que se logea que en este caso es el alumno , me pordrias decir como podria hacerle ? , se que es con sessiones pero como lo adapto con tu codigo en esa parte

    Respuesta

Deja un comentario

Tu dirección de correo electrónico no será publicada.