Consulta de logueo y manejo de usuarios

Iniciado por DiTeN, 23 Enero 2011, 15:50 PM

0 Miembros y 1 Visitante están viendo este tema.

DiTeN

Estimado foristas,

Les dejo una duda a ver si alguien me guia para evacuarla, resulta que casi ya he terminado un sistema con php y mysql, pero ahora lo que me quita el sueño es el manejo de usuarios, se que hay mucho por ahi, pero no se cual aplicar o sea o lo que me resulte un poco mas simple, debido a que soy un usuario novato, y es mi primer sistema de mediano porte con php y en linea, mi idea primaria, debido a que estoy con poco tiempo tambien era simplemente desviar a los usuarios a distintas carpetas (aunque eso suena un poco desprolijo no ??? :huh: )bueno, en resumen, lo otro que habia pensado, era luego de la consulta, ir pagina por pagina haciendo un get, pero seria muchisimo trabajo...y mas alla de q no estoy muy seguro de como hacerlo, osea tendria q llevarlo web a web???

Bueno espero me den una ayuda en este gran foro, q siempre me ha dado una mano,

Saludos!

.:Snifer:.

Hola no se si este te sirva es el que casi en todos los proyectos que realizo lo uso.


Inicio de Sesion

En mi caso manejo un Header por area por ejemplo de la Administracion,

Carpeta: Adminis -> header.php

Código (php) [Seleccionar]

<?php
//initialize the session
if (!isset($_SESSION)) {
  
session_start();
}

// ** Logout the current user. **
$logoutAction $_SERVER['PHP_SELF']."?doLogout=true";
if ((isset(
$_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){
  
$logoutAction .="&"htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset(
$_GET['doLogout'])) &&($_GET['doLogout']=="true")){
  
//to fully log out a visitor we need to clear the session varialbles
  
$_SESSION['MM_Username'] = NULL;
  
$_SESSION['MM_UserGroup'] = NULL;
  
$_SESSION['PrevUrl'] = NULL;
  unset(
$_SESSION['MM_Username']);
  unset(
$_SESSION['MM_UserGroup']);
  unset(
$_SESSION['PrevUrl']);

  
$logoutGoTo "../Pizzeria_Elis/index.php"/// SI NO SE LOGUEA VUELVE A CAMBIARIAS 


  
if ($logoutGoTo) {
    
header("Location: $logoutGoTo");
    exit;
  }
}
?>

<?php
if (!isset($_SESSION)) {
  
session_start();
}
$MM_authorizedUsers "1"/// aQUI ES DOND SE DA EL PERMISO EN MI CASO 1
$MM_donotCheckaccess "false";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers$strGroups$UserName$UserGroup) { 
  
// For security, start by assuming the visitor is NOT authorized. 
  
$isValid False

  
// When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
  // Therefore, we know that a user is NOT logged in if that Session variable is blank. 
  
if (!empty($UserName)) { 
    
// Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
    // Parse the strings into arrays. 
    
$arrUsers Explode(","$strUsers); 
    
$arrGroups Explode(","$strGroups); 
    if (
in_array($UserName$arrUsers)) { 
      
$isValid true
    } 
    
// Or, you may restrict access to only certain users based on their username. 
    
if (in_array($UserGroup$arrGroups)) { 
      
$isValid true
    } 
    if ((
$strUsers == "") && false) { 
      
$isValid true
    } 
  } 
  return 
$isValid
}

$MM_restrictGoTo "../Pizzeria_Elis/index.php";
if (!((isset(
$_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers$_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
  
$MM_qsChar "?";
  
$MM_referrer $_SERVER['PHP_SELF'];
  if (
strpos($MM_restrictGoTo"?")) $MM_qsChar "&";
  if (isset(
$QUERY_STRING) && strlen($QUERY_STRING) > 0
  
$MM_referrer .= "?" $QUERY_STRING;
  
$MM_restrictGoTo $MM_restrictGoTo$MM_qsChar "accesscheck=" urlencode($MM_referrer);
  
header("Location: "$MM_restrictGoTo); 
  exit;
}
?>




Y para el cierre de Sesion en el mismo Header

Código (php) [Seleccionar]

<a href="<?php echo $logoutAction ?>" class="enlacenav"></a>
<a href="<?php echo $logoutAction ?>" class="enlacenav">Usuario :
<?=$_SESSION["nom"]?>
(salir)</a>



Esto me basta que tenga en uno ya que llamo el header y dentro de el su menu que es distinto para cada Usuario.


Este es en mi index.php ... Es decir donde pueden loguearse.


index.php

Código (php) [Seleccionar]

<?php require_once('Connections/apl.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  if (
PHP_VERSION 6) {
    
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

mysql_select_db($database_Apl$Apl);
$query_Activos_Login_Usuario "SELECT * FROM usuarios ORDER BY nivel ASC";
$Apl_Login_Usuario mysql_query($query_Activos_Login_Usuario$Apl) or die(mysql_error());
$row_Activos_Login_Usuario mysql_fetch_assoc($Apl_Login_Usuario);
$totalRows_Activos_Login_Usuario mysql_num_rows($Apl_Login_Usuario);
?>

<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  
session_start();
}

$loginFormAction $_SERVER['PHP_SELF'];
if (isset(
$_GET['accesscheck'])) {
  
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}
/// LOS PERMISOS QUE LLEGO A DAR
if (isset($_POST['usuario'])) {
  
$loginUsername=$_POST['usuario'];
  
$password=$_POST['password'];
  
$MM_fldUserAuthorization "nivel";
  
$MM_redirectLoginSuccess "../index.php";
  
$MM_redirectLoginSuccess2 "../Cajero/index.php"
  
$MM_redirectLoginSuccess3 "../Almacen/index.php";
  
$MM_redirectLoginSuccess4 "../Cocina/index.php";
  
$MM_redirectLoginSuccess5 "../Repartidor/index.php";
  
$MM_redirectLoginFailed "index.php";

  
$MM_redirecttoReferrer false;
  
mysql_select_db($database_Apl$Apl);
  

  
$LoginRS__query=sprintf("SELECT usuario, clave, nivel FROM usuarios WHERE usuario=%s AND clave=%s",
  
GetSQLValueString($loginUsername"text"), GetSQLValueString($password"text")); 
   
  
$LoginRS mysql_query($LoginRS__query$Apl) or die(mysql_error());
  
$loginFoundUser mysql_num_rows($LoginRS);
  if (
$loginFoundUser) {
    
    
$loginStrGroup  mysql_result($LoginRS,0,'nivel');
    
    
//declare two session variables and assign them
    
$_SESSION['MM_Username'] = $loginUsername;
    
$_SESSION['MM_UserGroup'] = $loginStrGroup;       

    if (isset(
$_SESSION['PrevUrl']) && false) {
      
$MM_redirectLoginSuccess $_SESSION['PrevUrl'];
    }
      if(
$loginStrGroup==1) { header("Location: " $MM_redirectLoginSuccess ); }
  if($loginStrGroup==2) { header("Location: " $MM_redirectLoginSuccess2 ); }
  if($loginStrGroup==3) { header("Location: " $MM_redirectLoginSuccess3 ); }
      if(
$loginStrGroup==4) { header("Location: " $MM_redirectLoginSuccess4 ); }
      if(
$loginStrGroup==5) { header("Location: " $MM_redirectLoginSuccess5 ); }
  }
  else {
    
header("Location: "$MM_redirectLoginFailed );
  }
}
?>



y LO MAS IMPORTANTE EL FORM DE LOGIN:

Código (php) [Seleccionar]
<form action="<?php echo $loginFormAction?>" method="post" id="ingreso">
             
             <table width="100" border="0">
               <tr>
                 <td width="84" class="inserta_tablas1"><strong>Usuario:</strong></td>
                 <td width="57"><input name="usuario" type="text" id="usuario" size="10" /></td>
               </tr>
               <tr>
                 <td class="inserta_tablas1"><strong>Contrase&ntilde;a:</strong></td>
                 <td><input name="password" type="password" id="password" size="10" /></td>
               </tr>
               <tr>
                 <td class="inserta_tablas1">&nbsp;</td>
                 <td><span class="inserta_tablas1">
                   <input type="submit" name="button" id="button" value="Enviar" class="boton" onClick="return Ingreso();"/>
                 </span></td>
               </tr>
             </table>
</div>



La tabla que se usa es la siguiente:

Código (sql) [Seleccionar]

--
-- Estructura de tabla para la tabla `usuarios`
--

CREATE TABLE IF NOT EXISTS `usuarios` (
  `usuario` char(100) COLLATE utf8_bin NOT NULL COMMENT 'Nombre de usuario',
  `clave` char(10) COLLATE utf8_bin NOT NULL COMMENT 'Clave de Usuario',
  `nivel` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=FIXED;



Cualquier duda me avisas...

Saludos :P

~ Yoya ~

Primero formula tus ideas y lo que te falte hacer o no sepas como hacerlo en PHP ps pregunta.

@.:Snifer:. no pegues códigos asi, quizás le des mas preguntas que no tenga que ver con el tema actual.

@DiTeN si estas leyendo un manual, lo mas seguro lo que estas pidiendo este en el manual.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

.:Snifer:.

No es eso men yo solo lo hago por colaborar nada mas ok, y pues en parte si tienes razon no me di cuenta.. q puede ser q tenga aun mas dudas..


XD Saludos :P

DiTeN

Muchas gracias Snifer, ese codigo y esas consultas mas  o menos las entiendo bien, lo q si sigue siendo mi duda, es si en cada php que tengo creado en el proyecto tengo q llamar a ese header??? y a la funcion....

.:Snifer:.

Pues si mira te explico yo creo 2 headers uno para el admin otros para el cajero un ejemplo.

El admin que permisos tiene.

BD - USUARIOS - PLANTILLA-CAJA-PRODUCTOS VENTAS-

Ese seria su menu,y en el le doy el acceso de 1 asi que en cada php que tenga el administrador hago un require de su header..

El cajero:

Producots.Caja

Su menu otro header dando el nivel de 2.. y a todos su Header espero averme explicado bien.. me indicas si pudiste resolver tu problema

Saludos :P

DiTeN

Muy bien, esa parte del acceso la entiendo, ahora lo q no tengo muy claro, es como llevas los datos del usuario luego que hace su login, osea de pagina en pagina?? mas alla del header, o de la func q llamas, en algun lado tenes q llevar los datos del usuario q ingreso en el login y chequeaste en la primera web??  lo llevas mediante "Get"???? page por page??
gracias, Saludos!

.:Snifer:.

Código (php) [Seleccionar]
$loginStrGroup  = mysql_result($LoginRS,0,'nivel');

Esta parte del code es la que verifica en realidad al llevar el header se ahce la verificacion..

~ Yoya ~

Cita de: DiTeN en 24 Enero 2011, 13:05 PM
Muy bien, esa parte del acceso la entiendo, ahora lo q no tengo muy claro, es como llevas los datos del usuario luego que hace su login, osea de pagina en pagina?? mas alla del header, o de la func q llamas, en algun lado tenes q llevar los datos del usuario q ingreso en el login y chequeaste en la primera web??  lo llevas mediante "Get"???? page por page??
gracias, Saludos!

Se usan Cookies o Sesiones

Cita de: cookieUna cookie (pronunciado [ˈkʊ.ki]; literalmente galleta) es un fragmento de información que se almacena en el disco duro del visitante de una página web a través de su navegador, a petición del servidor de la página. Esta información puede ser luego recuperada por el servidor en posteriores visitas. En ocasiones también se le llama "huella".

Las sesiones son similares, la diferencia  es que los datos se guardan en el servidor y el cliente usa un indentificador que se usa para llamar una sesion guardada en el servidor.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.