Foros del Web » Programando para Internet » PHP »

Autentificacion de usuarios..

Estas en el tema de Autentificacion de usuarios.. en el foro de PHP en Foros del Web. El motivo de este post, es que necesito de alguna manera permitir múltiples inicios de sesión en un sistema echo en php yo tengo el ...
  #1 (permalink)  
Antiguo 12/02/2015, 12:19
Avatar de juniorxtm  
Fecha de Ingreso: julio-2014
Ubicación: Yucatán
Mensajes: 13
Antigüedad: 9 años, 9 meses
Puntos: 0
Pregunta Autentificacion de usuarios..

El motivo de este post, es que necesito de alguna manera permitir múltiples inicios de sesión en un sistema echo en php yo tengo el login por medio de sesiones pero esto solo permite que se autentifique un usuario por una ves asta terminar esta sesión, explico el problema, el formulario login permite seleccionar base de datos de cada empresa, e insertar datos usuario y contraseña pero como son múltiples empresas hay momentos en que tienen que trabajar en dos al mismo tiempo y tienen que cerrar una sesión y abrir otra. la idea es poder mantener iniciada las dos sesiones, con distinta empresa o base de datos. pongo los códigos que tengo asta ahora.

formulario frm_login.php
Código PHP:
<?php
session_start
(); 
if(isset(
$_SESSION['login'])) 
$login=$_SESSION['login'];else $login=false;
if(
$login){
?>
<script type="text/javascript">
    window.location="principal.php";
</script>
<?php
}else{
    
$error = @$_GET['error'];
    
$perror ="";
    if(!empty(
$error)){
        if(
$error == 1){
            
/* Reemplaza lo que esta entre comillas por lo 
            que quieras que se vea cuando no metan bien el pass */
            
$perror "Password Incorrecto";
        }elseif(
$error == 2){
            
$perror "Usuario no valido";
        }elseif(
$error == 3){
            
$perror "Sin permiso en empresa";
        }elseif(
$error == 4){
            
$perror "Sesion Terminada";
        }elseif(
$error == 5){
            
$perror "Inici&eacute; una sesi&oacute;n primero";
        }
        elseif(
$error == 6){
            
$perror "ERROR No tienes permisos asignados";
        }
        
/* en caso de que quieras setear mas errores descomenta lo siguiente
            Tambien puedes agregar mas siguiendo la idea */
 
        /*
        elseif($error = 2){
            $perror = "Otro error";
        }
        */
    
}
include(
"librerias/conexion_bd.php");
$link conectar(); 
$sql "SELECT * FROM bd WHERE estatus='1'";
$result mysqli_query($link,$sql);
$num_filas mysqli_num_rows($result);
?>
<html class="bg-black">
    <head>
        <meta charset="UTF-8">
        <title>Sistema Administrativo Empresarial | Log in</title>
        <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
        <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
        <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
        <link href="css/AdminLTE.css" rel="stylesheet" type="text/css" />
    </head>
    <body class="bg-black">
        <div class="form-box" id="login-box">
            <div class="header">Bienvenido - Inicie Sessi&oacute;n</div>
            <form action="sistema/login.php" method="post">
                <div class="body bg-gray">
                    <div class="form-group">
                        <input type="text" name="username" class="form-control" placeholder="ID Usuario"/>
                    </div>
                    <div class="form-group">
                        <input type="password" name="password" class="form-control" placeholder="Contrase&ntilde;a"/>
                    </div>
                    <div class="form-group">
                        <select name="bd" id="bd" required>
                    <?php
                    
if ($num_filas 0) {
                        while (
$fila mysqli_fetch_object($result)) {
                        
$id_bd $fila->id_bd;
                        
$nombre $fila->nombre;
                        
$estatus $fila->estatus;
                    
?>
                        <option value="<?php echo $id_bd ?>"><?php echo $nombre ?></option>';
                    <?php
                        
}
                    }
                    
?>
                    </select>
                    </div>
                </div>
                <div class="footer">
                    <button type="submit" class="btn bg-olive btn-block">Iniar Sesi&oacute;n</button>
              </div>
              <h1 align="center">
                <?php
                    
echo $perror;
                
?>
              </h1>
            </form>
        </div>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
        <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js" type="text/javascript"></script>
    </body>
</html>
<?php
}
?>

Última edición por juniorxtm; 12/02/2015 a las 12:41 Razón: No se me gurda el codigo D:
  #2 (permalink)  
Antiguo 12/02/2015, 12:42
Avatar de juniorxtm  
Fecha de Ingreso: julio-2014
Ubicación: Yucatán
Mensajes: 13
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Autentificacion de usuarios..

el archivo login.php
Código PHP:
<?php
//libreria de conecta ala bd 
include( "../librerias/conexion_bd.php" );
$link   conectar();
//obtienes usuario, password y base de datos enviado desde el form
$nombre $_POST'username' ];
$clave  $_POST'password' ];
$bd     $_POST'bd' ];
//buscamos si el usuario existe
$result mysqli_query$link"SELECT * FROM usuarios WHERE usuario = '" $nombre "' AND estatus='1'" );
if ( 
$row mysqli_fetch_array$result ) )
  {
//si existe comprobamos su clave
    
if ( $row"clave" ] == $clave )
      {
//si la clave es correcta comprobamos el usuario pueda usar la base de datos
        
$id_user       $row'id_usuario' ];
        
$consulta_p_bd mysqli_query$link"SELECT * FROM detalle_bd WHERE id_bd = '" $bd "' AND id_usuario='" $row"id_usuario" ] . "'" );
        if ( 
mysqli_num_rows$consulta_p_bd ) > )
          { 
//si puede usar la base de datos cargamos sus permisos
            
session_start();
            
$consulta_permisos mysqli_query$link"SELECT * FROM permisos WHERE id_bd='" $bd "' AND id_usuario='" $row'id_usuario' ] . "'" );
            if ( 
mysqli_num_rows$consulta_permisos ) > )
              {
                
$file                   mysqli_fetch_array$consulta_permisos );
                
$id_usuario             $id_user;
                
$usuario                $nombre;
                
$almacenes              $file'almacenes' ];
                
$almacenes_catalogo     $file'almacenes_catalogo' ];
                
$almacenes_nuevo        $file'almacenes_nuevo' ];
                
$almacenes_relacion     $file'almacenes_relacion' ];
                
$almacenes_detalles     $file'almacenes_detalles' ];
                
$almacenes_editar       $file'almacenes_editar' ];
                
$almacenes_eliminar     $file'almacenes_eliminar' ];
                
$articulos              $file'articulos' ];
                
$articulos_catalogo     $file'articulos_catalogo' ];
                
$articulos_nuevo        $file'articulos_nuevo' ];
                
$articulos_editar       $file'articulos_editar' ];
                
$articulos_eliminar     $file'articulos_eliminar' ];
                
$departamentos          $file'departamentos' ];
                
$departamentos_catalogo $file'departamentos_catalogo' ];
                
$departamentos_nuevo    $file'departamentos_nuevo' ];
                
$departamentos_editar   $file'departamentos_editar' ];
                
$departamentos_eliminar $file'departamentos_eliminar' ];
                
$embalajes              $file'embalajes' ];
                
$embalajes_catalogo     $file'embalajes_catalogo' ];
                
$embalajes_nuevo        $file'embalajes_nuevo' ];
                
$embalajes_editar       $file'embalajes_editar' ];
                
$embalajes_eliminar     $file'embalajes_eliminar' ];
                
$proveedor              $file'proveedor' ];
                
$proveedor_catalogo     $file'proveedor_catalogo' ];
                
$proveedor_nuevo        $file'proveedor_nuevo' ];
                
$proveedor_editar       $file'proveedor_editar' ];
                
$proveedor_eliminar     $file'proveedor_eliminar' ];
                
$compras                $file'compras' ];
                
$compras_catalogo       $file'compras_catalogo' ];
                
$compras_nuevo          $file'compras_nuevo' ];
                
$compras_detalles       $file'compras_detalle' ];
                
$compras_editar         $file'compras_editar' ];
                
$compras_eliminar       $file'compras_eliminar' ];
                
$ventas                 $file'ventas' ];
                
$reportes               $file'reportes' ];
                
$sistema                $file'sistema' ];
                
$crear_empresa          $file'sistema_crear_empresa' ];
                
//por ultimo creamos la session donde se almacena toda la ingo de sus permisos e identificador
                
if ( isset( $_SESSION'login' ] ) )
                    
$login $_SESSION'login' ];
                
$loginmd5$row'id_usuario' ] ) ] = array(
                     
'identificador' => md5$row'id_usuario' ] ),
                    
'bd' => $bd,
                    
'id_usuario' => $id_usuario,
                    
'usuario' => $usuario,
                    
'avatar' => $row'avatar' ],
                    
'almacenes' => $almacenes,
                    
'almacenes_catalogo' => $almacenes_catalogo,
                    
'almacenes_nuevo' => $almacenes_nuevo,
                    
'almacenes_relacion' => $almacenes_relacion,
                    
'almacenes_detalles' => $almacenes_detalles,
                    
'almacenes_editar' => $almacenes_editar,
                    
'almacenes_eliminar' => $almacenes_eliminar,
                    
'articulos' => $articulos,
                    
'articulos_catalogo' => $articulos_catalogo,
                    
'articulos_nuevo' => $articulos_nuevo,
                    
'articulos_editar' => $articulos_editar,
                    
'articulos_eliminar' => $articulos_eliminar,
                    
'departamentos' => $departamentos,
                    
'departamentos_catalogo' => $departamentos_catalogo,
                    
'departamentos_nuevo' => $departamentos_nuevo,
                    
'departamentos_editar' => $departamentos_editar,
                    
'departamentos_eliminar' => $departamentos_eliminar,
                    
'embalajes' => $embalajes,
                    
'embalajes_catalogo' => $embalajes_catalogo,
                    
'embalajes_nuevo' => $embalajes_nuevo,
                    
'embalajes_editar' => $embalajes_editar,
                    
'embalajes_eliminar' => $embalajes_eliminar,
                    
'proveedor' => $proveedor,
                    
'proveedor_catalogo' => $proveedor_catalogo,
                    
'proveedor_nuevo' => $proveedor_nuevo,
                    
'proveedor_editar' => $proveedor_editar,
                    
'proveedor_eliminar' => $proveedor_eliminar,
                    
'compras' => $compras,
                    
'compras_catalogo' => $compras_catalogo,
                    
'compras_nuevo' => $compras_nuevo,
                    
'compras_detalle' => $compras_detalle,
                    
'compras_editar' => $compras_editar,
                    
'compras_eliminar' => $compras_eliminar,
                    
'ventas' => $ventas,
                    
'reportes' => $reportes,
                    
'sistema' => $sistema,
                    
'crear_empresa' => $crear_empresa 
                
);
                
$_SESSION'login' ]                  = $login;
                
header"Location:../principal.php" );
              } 
//mysqli_num_rows( $consulta_permisos ) > 0
            
else
              {
                echo 
'
           <script type="text/javascript">
                window.location="../index.php?error=6";
              </script>
           '
;
              }
          } 
//mysqli_num_rows( $consulta_p_bd ) > 0
        
else
          {
            echo 
'
    <script type="text/javascript">
        window.location="../index.php?error=3";
       </script>
    '
;
          }
      } 
//$row[ "clave" ] == $clave
    
else
      {
?>
   <script type="text/javascript">
    window.location="../index.php?error=1";
   </script>
  <?php
      
}
  } 
//$row = mysqli_fetch_array( $result )
else
  {
?>
<?php
?>
 <script type="text/javascript">
    window.location="../index.php?error=2";
 </script>
<?php
  
}
mysqli_free_result$result );
mysqli_close$link );
?>

Última edición por juniorxtm; 12/02/2015 a las 12:44 Razón: faltaron etiquetas PHP
  #3 (permalink)  
Antiguo 12/02/2015, 12:44
Avatar de juniorxtm  
Fecha de Ingreso: julio-2014
Ubicación: Yucatán
Mensajes: 13
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Autentificacion de usuarios..

el archivo conexion.php
Código PHP:
<?php
function conectar( )
  {
    if ( !( 
$link mysqli_connect"localhost""root""" ) ) )
      {
        echo 
"Error conectando a la base de datos.";
        exit( );
      } 
//!( $link = mysqli_connect( "localhost", "root", "" ) )
    
if ( !mysqli_select_db$link"empresas" ) )
      {
        echo 
"Error seleccionando la base de datos.";
        exit( );
      } 
//!mysqli_select_db( $link, "empresas" )
    
return $link;
  }
?>
  #4 (permalink)  
Antiguo 12/02/2015, 12:45
Avatar de juniorxtm  
Fecha de Ingreso: julio-2014
Ubicación: Yucatán
Mensajes: 13
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Autentificacion de usuarios..

la segunda conexion.php
Código PHP:
<?php
function conectar0( )
  {
    include( 
"../librerias/conexion_bd.php" );
    
$link conectar();
    
session_start();
    if ( isset( 
$_SESSION'login' ] ) )
        
$login $_SESSION'login' ];
    else
        
$login false;
    if ( 
$login )
      {
        foreach ( 
$login as $k => $v )
          {
            
$bd          $v'bd' ];
            
$consulta_bd mysqli_query$link"SELECT * FROM bd WHERE id_bd = '" $bd "'" );
            
$row         mysqli_fetch_array$consulta_bd );
            
$empresa     $row'nombre' ];
            if ( !( 
$link0 mysqli_connect"localhost""root""" ) ) )
              {
                echo 
"Error conectando a la base de datos.";
                exit( );
              } 
//!( $link0 = mysqli_connect( "localhost", "root", "" ) )
            
if ( !mysqli_select_db$link0$empresa ) )
              {
                echo 
"Error seleccionando la base de datos.";
                exit( );
              } 
//!mysqli_select_db( $link0, $empresa )
            
return $link0;
          } 
//$login as $k => $v
      
//$login
  
}
  #5 (permalink)  
Antiguo 12/02/2015, 14:11
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Autentificacion de usuarios..

Tu problema es que estas ligando una cuenta a una empresa, cuando lo que debes de permitir es que una cuenta pueda trabajar con tantas empresas como requiera. Para eso necesitas armar un esquema donde puedas consultar que empresas puede usar una cuenta.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 12/02/2015, 14:48
Avatar de juniorxtm  
Fecha de Ingreso: julio-2014
Ubicación: Yucatán
Mensajes: 13
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Autentificacion de usuarios..

Cita:
Iniciado por hhs Ver Mensaje
Tu problema es que estas ligando una cuenta a una empresa, cuando lo que debes de permitir es que una cuenta pueda trabajar con tantas empresas como requiera. Para eso necesitas armar un esquema donde puedas consultar que empresas puede usar una cuenta.
En realidad hay una tabla que tiene las empresas y los usuarios pueden usarla en ese punto es un esquema de permisos, de echo en el login.php esta //consultamos permiso para usar bd o empresa. en este punto se comprueba si podemos usar la empresa y los usuarios pueden usar las empresas que se le asignen. pero como puedo iniciar dos veces en diferentes sesiones y que cargue la coneccion a la bd de esa empresa siento que no me explico.
  #7 (permalink)  
Antiguo 12/02/2015, 14:58
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Autentificacion de usuarios..

Si tus aplicaciones están de forma independiente en uno o mas servidores, tienes que crear servicios que las comuniquen, de esa forma solo requieres una cuenta de usuario no varias para cada usuario.
Si tu aplicación tiene varias bases de datos solo necesitas los datos de conexión y decidir mediante tu esquema de permisos si puede o no acceder a los datos de esa empresa así que no necesitas varias sesiones.
A lo que voy es que tienes que buscar la forma de decidir en tiempo de ejecución si puede o no acceder a los datos sin necesidad de dejar su sesión.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 12/02/2015, 15:02
Avatar de juniorxtm  
Fecha de Ingreso: julio-2014
Ubicación: Yucatán
Mensajes: 13
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Autentificacion de usuarios..

Cita:
Iniciado por hhs Ver Mensaje
Si tus aplicaciones están de forma independiente en uno o mas servidores, tienes que crear servicios que las comuniquen, de esa forma solo requieres una cuenta de usuario no varias para cada usuario.
Si tu aplicación tiene varias bases de datos solo necesitas los datos de conexión y decidir mediante tu esquema de permisos si puede o no acceder a los datos de esa empresa así que no necesitas varias sesiones.
A lo que voy es que tienes que buscar la forma de decidir en tiempo de ejecución si puede o no acceder a los datos sin necesidad de dejar su sesión.
Solo son barias base de datos.
y solo uso una tabla de usuarios lo que si cambian son la que tiene permisos puesto que los permisos son diferentes segun la empresa, entiendo a medias lo de acceder o no a los datos, por ejemplo si necesitan estar en una empresa donde esta el PV pero necesitan entrar a otra empresa para consultar un reporte de saldos o cuentas por cobrar sugieres que ponga al momento de consultar este reporte se indique de que empresa? osea listarles en que empresa quieren iniciar

Me lio mucho asiendo esquema T.T
  #9 (permalink)  
Antiguo 12/02/2015, 15:11
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Autentificacion de usuarios..

Mas bien tienen que ver la opción y acceder a ella de forma transparente, para eso tienes el esquema de permisos para saber si puede o no hacer la conexión a esa empresa y generar el reporte.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #10 (permalink)  
Antiguo 13/02/2015, 09:55
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Autentificacion de usuarios..

Se que no lo preguntaste pero tienes un problema de seguridad en el login, deberias escapar el user y password para evitar sql_inyection

Etiquetas: usuarios
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:10.