Foros del Web » Programando para Internet » PHP »

PHP OO sesiones en php

Estas en el tema de sesiones en php en el foro de PHP en Foros del Web. Hola Que tal tengo una duda de que manera puedo evitar que los usuarios ingresen a determinada página si no tienen permisos por ejemplo que ...
  #1 (permalink)  
Antiguo 06/09/2015, 22:18
Avatar de joseanguiano  
Fecha de Ingreso: agosto-2015
Ubicación: Coatzacoalcos
Mensajes: 87
Antigüedad: 8 años, 6 meses
Puntos: 1
Pregunta sesiones en php

Hola Que tal tengo una duda de que manera puedo evitar que los usuarios ingresen a determinada página si no tienen permisos por ejemplo que un usuario normal no pueda acceder desde el URL colocando la pagina que corresponde a un administrador? y que un administrador no pueda entradar a la pagina de un usuario normal? se manejan sesiones? GRACIAS SALUDOS

tengo este codigo pero no se que sintaxis poner para que un usuario NORMAL NO pueda acceder colocando en la URL www.holamundo/administrador y le de acceso siendo este un usuario normal.

<?php

session_start();
$usernamesistema =$_POST['usernamesistema'];
$passwordsistema =$_POST['passwordsistema'];
include("conexion.php");
$proceso = $mysqli->query("SELECT * FROM usersistema WHERE usernamesistema='$usernamesistema' AND passwordsistema='$passwordsistema'");
if($resultado = mysqli_fetch_array($proceso)){
$_SESSION['suario'] = $usernamesistema;
$_SESSION['u_pass'] = $passwordsistema;

$role = $resultado["profile"];
switch ($role) {
case 'Trabajador':
header("Location: Trabajador/"
);
break;

case 'Gerente':
header("Location: Gerente/");
break;

case 'Admin':
header("Location: Administrador/");
break;
default:
echo "<script type=\"text/javascript\">alert('¡Opps! Si no tienes un perfil, estás descartado'); window.location='index.html';</script>";

}
}

else{
echo"<script type=\"text/javascript\">alert('Usuario o Contraseña incorrectos'); window.location='index.html';</script>";

}

?>
__________________
Lo fácil, ya lo hice, lo difícil lo estoy haciendo y lo imposible, me tardare pero lo lograre.
  #2 (permalink)  
Antiguo 07/09/2015, 05:07
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 8 meses
Puntos: 263
Respuesta: sesiones en php

bueno en realidad yo lo que controlo es el menu que se muestra a cada tipo de usuario, y en las paginas que son exclusivamente para administradores coloco:

Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.      
  4.     if (isset($_SESSION['MM_Username']) && $_SESSION['logueado'] == true && $_SESSION['nivel'] == 'Administrdor')
  5.     {
  6.     }
  7.     else
  8.     {
  9.         header('Location:/JessalepComputer/error_acceso.php');
  10.      
  11.     exit;
  12.     }
  13. ?>

y donde quiero que puedan acceder ambos:


Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.      
  4.     if (isset($_SESSION['MM_Username']) && $_SESSION['logueado'] == true && $_SESSION['nivel'] == 'Administrdor' && $_SESSION['nivel'] == 'Gerente')
  5.     {
  6.     }
  7.     else
  8.     {
  9.         header('Location:/JessalepComputer/error_acceso.php');
  10.      
  11.     exit;
  12.     }
  13. ?>
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 07/09/2015, 06:50
Avatar de joseanguiano  
Fecha de Ingreso: agosto-2015
Ubicación: Coatzacoalcos
Mensajes: 87
Antigüedad: 8 años, 6 meses
Puntos: 1
Pregunta Respuesta: sesiones en php

Cita:
Iniciado por xfxstudios Ver Mensaje
bueno en realidad yo lo que controlo es el menu que se muestra a cada tipo de usuario, y en las paginas que son exclusivamente para administradores coloco:

Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.      
  4.     if (isset($_SESSION['MM_Username']) && $_SESSION['logueado'] == true && $_SESSION['nivel'] == 'Administrdor')
  5.     {
  6.     }
  7.     else
  8.     {
  9.         header('Location:/JessalepComputer/error_acceso.php');
  10.      
  11.     exit;
  12.     }
  13. ?>

y donde quiero que puedan acceder ambos:


Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.      
  4.     if (isset($_SESSION['MM_Username']) && $_SESSION['logueado'] == true && $_SESSION['nivel'] == 'Administrdor' && $_SESSION['nivel'] == 'Gerente')
  5.     {
  6.     }
  7.     else
  8.     {
  9.         header('Location:/JessalepComputer/error_acceso.php');
  10.      
  11.     exit;
  12.     }
  13. ?>

Hola amigo primero que nada gracias por tan pronta respuesta, fijate que eso estaba pensando mas sin embargo lo he intentado hacer pero no se en que parte colocar la declaracion de esas variables ya sea un administrados o un usuario normal
Código PHP:
if($resultado mysqli_fetch_array($proceso)){

    
$_SESSION['u_usuario'] = $usernamesistema;
    
$_SESSION['u_pass'] = $usernamesistema;
    
//$_SESSION['u_profile'] = $u_profile;
    //$_SESSION['u_clave_t_e'] = $u_clave_t_e;
    //$_SESSION['u_clave_t_s'] = $u_clave_t_s;





$role $resultado["profile"];
switch (
$role) {
    case 
'Trabajador':
        
header("Location: Trabajador/"
            
);
        break;
    
    case 
'Gerente':
        
header("Location: Gerente/");
        break;

    case 
'Admin':
        
header("Location: Administrador/");
        break;
    default:
            echo 
"<script type=\"text/javascript\">alert('¡Opps! Si no tienes un perfil, estás descartado'); window.location='index.html';</script>";  

}
}

else{
    echo
"<script type=\"text/javascript\">alert('Usuario o Contraseña incorrectos'); window.location='index.html';</script>";  


donde podria colar ese tipo de variables? ya sea administrador o usuario normal y una disiculpa por mis preguntas de novato ya que soy nuevo en esto te agradesco una vez mas. no se si es en el break dentro los case o fuera pero no se donde sabes tu una ideas mas?

esta pagina es la de un usario normal

Código PHP:
Ver original
  1. <?php
  2.    
  3.         session_start();
  4.  
  5.         if(isset($_SESSION['u_usuario'])){
  6.  
  7.                     }
  8.  
  9.         else{
  10.  
  11.             header("Location: /sistemaarasystem/index.php");
  12.  
  13.         }
  14.  
  15.     ?>
como seria la sintaxis con tu ejemplo :/
__________________
Lo fácil, ya lo hice, lo difícil lo estoy haciendo y lo imposible, me tardare pero lo lograre.
  #4 (permalink)  
Antiguo 07/09/2015, 07:10
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 8 meses
Puntos: 263
Respuesta: sesiones en php

bueno asi realizo yo la verificación del usuario que se conecta:

Código PHP:
Ver original
  1. if(empty($_POST['usuario'])){
  2.     $msg = "";
  3. } else if(empty($_POST['clave'])){
  4.     $msg = "";
  5. }else{
  6.    
  7. $usuario = mysqli_real_escape_string($db, $_POST['usuario']);
  8. $cedula1 = $_POST['cedula'];
  9.    
  10. $users = $db->query("SELECT usuario,clave,nombre,cedula,nivel,zona FROM usuarios WHERE usuario ='$usuario' AND cedula = '$cedula1'");
  11. $row_result = $users->fetch_array();
  12.  
  13. $password = (crypt($_POST['clave'], $row_result['clave']));
  14.  
  15. $usuario = $row_result['usuario'];
  16. $clave = $row_result['clave'];
  17. $nivel = $row_result['nivel'];
  18. $zona = $row_result['zona'];
  19. $nombre = $row_result['nombre'];
  20. $cedula = $row_result['cedula'];
  21.  
  22.  if($clave == $password && $cedula == $cedula1){
  23.      $_SESSION['MM_Username'] = $usuario;
  24.      $_SESSION['logueado'] = true;
  25.      $_SESSION['nivel'] = $nivel; /*AQUÍ DECLARO EL NIVEL QUE TIENE EL USUARIO CONECTADO*/
  26.      $_SESSION['zona'] = $zona;
  27.      $_SESSION['cedula'] = $cedula;
  28.      $_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
  29.      
  30.      $fecha = $_POST['fecha'];
  31.      $hora = $_POST['hora'];
  32.      $ip = $_POST['ip'];
  33.      $acceso = $db->query("INSERT INTO accesos (usuario,nombre,cedula,fecha_entra,hora_entra,fecha_sale,hora_sale,ip_acceso) VALUES ('$usuario' , '$nombre' , '$cedula' , '$fecha' , '$hora' , '' , '' , '$ip')");
  34.      
  35.      header('location: app/escritorio.php');
  36.      
  37.  } else{
  38.      $fecha = $_POST['fecha'];
  39.      $hora = $_POST['hora'];
  40.      $ip = $_POST['ip'];   
  41.      $intento = $db->query("INSERT INTO intentos_accesos (fecha,hora,ip,campo_usuario,campo_clave) VALUES ('$fecha' , '$hora' , '$ip' , '$_POST[usuario]' , '$_POST[clave]')");
  42.      $msg = "Datos inválidos";
  43.        
  44.  }
  45. }

Como puedes realizo la dirección a una sola pagina, sea quien sea el que se loguee.


en las paginas hay un include que indica que menu se va a cargar de acuerdo al nivel de la persona que se conecta:

Código PHP:
Ver original
  1. //Carga del dash de acuerdo al usuario logueado
  2. if($_SESSION['nivel'] == "Usuario")
  3.     {
  4.         $menu = "menu_usuario";
  5.     }
  6.     else if($_SESSION['nivel'] == "Tecnico")
  7.         {
  8.             $menu = "menu_tecnico";
  9.         }
  10.         else if($_SESSION['nivel'] == "Cliente")
  11.             {
  12.                 $menu = "menu_cliente";
  13.             }
  14.             else if($_SESSION['nivel'] == "Administrador")
  15.                 {
  16.                     $menu = "menu_administrador";
  17.                 }

eso solo a a mostrar las paginas que le corresponde ver al usuario conectado por su nivel de acceso, no podra visualizar ninguna otra que yo no quiera, pero si de casualidad el usuario supiera el nombre de una pagina, por ejemplo de un administrador, en la variable de sesion de cada pagina esta la condicion de que se genere un error 404 si no tiene autorizacion para visualizarla:


Código PHP:
Ver original
  1. /*Ejemplo esta pagina solo puede ser vista por administradores, si alguien intenta acceder sin ese nivel, genera el erro*/
  2.      
  3.     if (isset($_SESSION['MM_Username']) && $_SESSION['logueado'] == true && $_SESSION['nivel'] == 'Administrdor')
  4.     {
  5.     }
  6.     else
  7.     {
  8.         header('Location:/JessalepComputer/error_acceso.php');
  9.      
  10.     exit;
  11.     }
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 08/09/2015, 06:35
Avatar de joseanguiano  
Fecha de Ingreso: agosto-2015
Ubicación: Coatzacoalcos
Mensajes: 87
Antigüedad: 8 años, 6 meses
Puntos: 1
Pregunta Respuesta: sesiones en php

Cita:
Iniciado por xfxstudios Ver Mensaje
bueno asi realizo yo la verificación del usuario que se conecta:

Código PHP:
Ver original
  1. if(empty($_POST['usuario'])){
  2.     $msg = "";
  3. } else if(empty($_POST['clave'])){
  4.     $msg = "";
  5. }else{
  6.    
  7. $usuario = mysqli_real_escape_string($db, $_POST['usuario']);
  8. $cedula1 = $_POST['cedula'];
  9.    
  10. $users = $db->query("SELECT usuario,clave,nombre,cedula,nivel,zona FROM usuarios WHERE usuario ='$usuario' AND cedula = '$cedula1'");
  11. $row_result = $users->fetch_array();
  12.  
  13. $password = (crypt($_POST['clave'], $row_result['clave']));
  14.  
  15. $usuario = $row_result['usuario'];
  16. $clave = $row_result['clave'];
  17. $nivel = $row_result['nivel'];
  18. $zona = $row_result['zona'];
  19. $nombre = $row_result['nombre'];
  20. $cedula = $row_result['cedula'];
  21.  
  22.  if($clave == $password && $cedula == $cedula1){
  23.      $_SESSION['MM_Username'] = $usuario;
  24.      $_SESSION['logueado'] = true;
  25.      $_SESSION['nivel'] = $nivel; /*AQUÍ DECLARO EL NIVEL QUE TIENE EL USUARIO CONECTADO*/
  26.      $_SESSION['zona'] = $zona;
  27.      $_SESSION['cedula'] = $cedula;
  28.      $_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
  29.      
  30.      $fecha = $_POST['fecha'];
  31.      $hora = $_POST['hora'];
  32.      $ip = $_POST['ip'];
  33.      $acceso = $db->query("INSERT INTO accesos (usuario,nombre,cedula,fecha_entra,hora_entra,fecha_sale,hora_sale,ip_acceso) VALUES ('$usuario' , '$nombre' , '$cedula' , '$fecha' , '$hora' , '' , '' , '$ip')");
  34.      
  35.      header('location: app/escritorio.php');
  36.      
  37.  } else{
  38.      $fecha = $_POST['fecha'];
  39.      $hora = $_POST['hora'];
  40.      $ip = $_POST['ip'];   
  41.      $intento = $db->query("INSERT INTO intentos_accesos (fecha,hora,ip,campo_usuario,campo_clave) VALUES ('$fecha' , '$hora' , '$ip' , '$_POST[usuario]' , '$_POST[clave]')");
  42.      $msg = "Datos inválidos";
  43.        
  44.  }
  45. }

Como puedes realizo la dirección a una sola pagina, sea quien sea el que se loguee.


en las paginas hay un include que indica que menu se va a cargar de acuerdo al nivel de la persona que se conecta:

Código PHP:
Ver original
  1. //Carga del dash de acuerdo al usuario logueado
  2. if($_SESSION['nivel'] == "Usuario")
  3.     {
  4.         $menu = "menu_usuario";
  5.     }
  6.     else if($_SESSION['nivel'] == "Tecnico")
  7.         {
  8.             $menu = "menu_tecnico";
  9.         }
  10.         else if($_SESSION['nivel'] == "Cliente")
  11.             {
  12.                 $menu = "menu_cliente";
  13.             }
  14.             else if($_SESSION['nivel'] == "Administrador")
  15.                 {
  16.                     $menu = "menu_administrador";
  17.                 }

eso solo a a mostrar las paginas que le corresponde ver al usuario conectado por su nivel de acceso, no podra visualizar ninguna otra que yo no quiera, pero si de casualidad el usuario supiera el nombre de una pagina, por ejemplo de un administrador, en la variable de sesion de cada pagina esta la condicion de que se genere un error 404 si no tiene autorizacion para visualizarla:


Código PHP:
Ver original
  1. /*Ejemplo esta pagina solo puede ser vista por administradores, si alguien intenta acceder sin ese nivel, genera el erro*/
  2.      
  3.     if (isset($_SESSION['MM_Username']) && $_SESSION['logueado'] == true && $_SESSION['nivel'] == 'Administrdor')
  4.     {
  5.     }
  6.     else
  7.     {
  8.         header('Location:/JessalepComputer/error_acceso.php');
  9.      
  10.     exit;
  11.     }
Hola de nuevo amigo gracias nuevamente por tu gran ayuda que me estas brindando tengo un error de acuerdo al codigo que me mandaste quise acoplarlo al mio de la siguiente manera

Código PHP:
<?php
    
        session_start
();

        if(
$_SESSION['u_profile'] == "Trabajador"){
                    

                    }

        else{

            
header("Location: /sistemaarasystem/index.php");

        }

    
?>
funciona al perfeccion NO PUEDO ENTRAR A LA PARTE DE UN ADMINISTRADOR Y UN ADMINISTRADOR A LA PARTE DE UN USARIO NORMAL eso era la parte que me interesaba mas sin embargo al momento de entrar con el usuario trabajador de igual manera me bota al index.php infiere que dentro del if ira un sentencia mas.

Código PHP:
if($_SESSION['u_profile'] == "Trabajador"){
                    
                                                  
// que sentencia podria ir aqui para que observe //que de verdad soy el usuario norma y me deje en esta misma pagina 
                    


UNA VEZ MAS GRACIAS POR TU VALIOSA AYUDA
__________________
Lo fácil, ya lo hice, lo difícil lo estoy haciendo y lo imposible, me tardare pero lo lograre.
  #6 (permalink)  
Antiguo 08/09/2015, 07:12
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 8 meses
Puntos: 263
Respuesta: sesiones en php

Bueno con ese código ya el sistema debería de estar dejando ver la info si es un trabajador, pero debes verificar si realmente te esta cargando trabajador en la variable de sesion, en el header coloca esto:

Código PHP:
Ver original
  1. header("Location: /sistemaarasystem/index.php?nivel=".$_SESSION['u_profile']);

y en el index imprime esa variable nivel para ver que es lo que te muestra
__________________
[email protected]
HITCEL
  #7 (permalink)  
Antiguo 08/09/2015, 13:10
Avatar de joseanguiano  
Fecha de Ingreso: agosto-2015
Ubicación: Coatzacoalcos
Mensajes: 87
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: sesiones en php

Hola amigo coloque esta parte en mi index.php

Código PHP:
<?php

    
        session_start
();

        
//if($_SESSION['U_'] == "Trabajador"){
                
if(isset($_SESSION['u_usuario']) && $_SESSION['u_profile']=='Trabajador')
                {
            
header("Location: /sistemaarasystem/index.php?nivel=".$_SESSION['u_profile']);                    }

        else{

            
header("Location:/sistemaarasystem/Trabajador/entrada.php?nivel=".$_SESSION['u_profile']);
            exit;
        }

    
?>
Gracias a ese codigo que me brindaste los demas usuario que son administrador no pueden entrar hasta ese momento todo esta bien
pero como te decia el propio trabajador no puede ver su propio index siendo este mismo el mismo usuario trabajador cres que este algo mal en en proceso? te muestro..

Código PHP:
<?php

session_start
();



$usernamesistema =$_POST['usernamesistema'];

$passwordsistema =$_POST['passwordsistema'];

$profile =$_POST['profile'];


include(
"conexion.php");


//SELECT usernamesistema,passwordsistema,clave_t_e FROM usersistema
$proceso $mysqli->query("SELECT usernamesistema,profile,passwordsistema FROM usersistema WHERE usernamesistema='$usernamesistema' AND passwordsistema='$passwordsistema'");



if(
$resultado mysqli_fetch_array($proceso)){

    
$_SESSION['u_usuario'] = $usernamesistema;
    
$_SESSION['u_pass'] = $usernamesistema;
    
$_SESSION['u_profile'] = $profile;
    
//$_SESSION['u_clave_t_e'] = $u_clave_t_e;
    //$_SESSION['u_clave_t_s'] = $u_clave_t_s;





$role $resultado["profile"];
switch (
$role) {
    case 
'Trabajador':
        
header("Location: Trabajador/"
            
);
        break;
    
    case 
'Gerente':
        
header("Location: Gerente/");
        break;

    case 
'Admin':
        
header("Location: Administrador/");
        break;
    default:
            echo 
"<script type=\"text/javascript\">alert('¡Opps! Si no tienes un perfil, estás descartado'); window.location='index.html';</script>";  

}
}

else{
    echo
"<script type=\"text/javascript\">alert('Usuario o Contraseña incorrectos'); window.location='index.html';</script>";  

}





?>
Gracias tus ejemplos me son de ayuda
__________________
Lo fácil, ya lo hice, lo difícil lo estoy haciendo y lo imposible, me tardare pero lo lograre.

Etiquetas: php+archivos, sesiones, sesiones_en_php
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 01:17.