Foros del Web » Programando para Internet » PHP »

Dirigir o redirigir usuarios despues logearse

Estas en el tema de Dirigir o redirigir usuarios despues logearse en el foro de PHP en Foros del Web. Hola a tod@s! Tengo una web en la cual mi idea es restringir el paso a los usuarios. Para ello he usado el siguiente código: ...
  #1 (permalink)  
Antiguo 14/09/2006, 07:58
moe
 
Fecha de Ingreso: septiembre-2006
Mensajes: 13
Antigüedad: 17 años, 7 meses
Puntos: 2
Dirigir o redirigir usuarios despues logearse

Hola a tod@s!

Tengo una web en la cual mi idea es restringir el paso a los usuarios.
Para ello he usado el siguiente código:

Código PHP:
<?php 
     
if (!isset($PHP_AUTH_USER)) {
        
header('WWW-Authenticate: Basic realm="Acceso restringido"');
        
header('HTTP/1.0 401 Unauthorized');
        echo 
'Authorization Required.';
        exit;
    }
    
    
$fich file("passwords.txt");
    
$i=0$validado=false;
    while (
$fich[$i] && !$validado) {
        
$campo explode("|",$fich[$i]);
        if ((
$PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1]))) $validado=true;
        
$i++;
    }

    if (!
$validado) {
        
header('WWW-Authenticate: Basic realm="Acceso restringido"');
        
header('HTTP/1.0 401 Unauthorized');
        echo 
'Authorization Required.';
        exit;
    }
?>

<html>
<head>
    <title>Ejemplo de PHP</title>
</head>
<body>
Ha conseguido el acceso a la <B>zona restringida</B> con el usuario <?php echo $PHP_AUTH_USER?>.
</body>
</html>
Bien hasta aquí todo correcto, se despliega una ventana en la cual metes user y pass. En un. txt tengo los usuarios y contraseñas y así consigo que lo valide.
Ahora lo que quiero es que cuando se logea un usuario (tengo unos 30)además de validarlo le envie a la página que le corresponda, la suya personal.

Así pues la pregunta es, ¿como hago para que una vez de por válido el user y la pass introducido/a le diriga a la página que yo le diga?

Espero no haberme enrollado mucho.
Gracias por leerme y atenderme!
  #2 (permalink)  
Antiguo 14/09/2006, 08:01
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 19 años, 5 meses
Puntos: 1
Que tal, tienes en algun lado la diferencia entre usuarios osea niveles (administradores, usuarios, etc) si es asi le compruebas el nivel del usuario y lo redireccionas con el header o con javascript si has impreso algo, si no tienes los niveles de los usaurios explicanos como piensas comprobar que usuario es cual. Espero te haya aclarado... Saludos
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #3 (permalink)  
Antiguo 14/09/2006, 08:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Podría ser:

Código PHP:
<?php  
     
if (!isset($_SERVER['PHP_AUTH_USER'])) { 
        
header('WWW-Authenticate: Basic realm="Acceso restringido"'); 
        
header('HTTP/1.0 401 Unauthorized'); 
        echo 
'Authorization Required.'
        exit; 
    } 
     
    
$fich file("passwords.txt"); 
    
$i=0$validado=false
    while (
$fich[$i] && !$validado) { 
        
$campo explode("|",$fich[$i]); 
        if ((
$_SERVER['PHP_AUTH_USER']==$campo[0]) && ($_SERVER['PHP_AUTH_PW']==chop($campo[1]))) $validado=true
        
$i++; 
    } 

    if (!
$validado) { 
        
header('WWW-Authenticate: Basic realm="Acceso restringido"'); 
        
header('HTTP/1.0 401 Unauthorized'); 
        echo 
'Authorization Required.'
        exit; 
    } 

// Ejemplo: Se asume que tu usuario página será: nombre_usuario.php .. 
header ("Location: ".$_SERVER['PHP_AUTH_USER'].".php");
?>
No sé como identificas los datos de tu usuario -> página "personal" .. No sé si le das el mismo nombre a una "página?" o a un directorio .. o como .. Tienes que definir y dejar claro ese punto. El ejemplo que expongo asume por ejemplo que creas páginas para su usuarios.

Realmente deberías usar sesiones para tener un mejor control de esas páginas por usuario .. Cuidado que otros usuarios "logeados" vean páginas de otros -usuarios- simplemente marcando el URL directo de las otras páginas. Esto se solventa con sesiones (no con autentificación HTTP).

PD: Ten cuidado . .usa los arrays superglobales: $_SERVER para acceder a tus variables de servidor (como es tu caso) .. por tu seguridad.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 14/09/2006, 08:14
moe
 
Fecha de Ingreso: septiembre-2006
Mensajes: 13
Antigüedad: 17 años, 7 meses
Puntos: 2
Hola jmqc.

En el mismo directorio tengo un .txt llamado password donde tengo los usuarios y contraseñas y así consigo que lo valide.

Ahora mismo el txt tiene la siguiente información:

Joe|1235
Pedro|qwer
Noe|Gty45e
kermit|rwe4v

Y a priori ninguno tiene un rango diferente al otro.

Luego he creado con dreamweaver un documento php insertando el código de arriba. En el cual si pongo en el navegador la dirección localhost\etc\validar.php (tengo el servidor en el propio pc para ir haciendo las pruebas) se me despliega una pequeña ventana tipo como cuando intentas entrar en el router vía web ( no se si sabes a cual me refiero) en la cual debo meter el user y la pass.

Y ahora lo que me gustaría es poder especificar la página a la que tiene que ir cada usuario una vez se haya logeado.

Un saludo!
  #5 (permalink)  
Antiguo 14/09/2006, 08:27
moe
 
Fecha de Ingreso: septiembre-2006
Mensajes: 13
Antigüedad: 17 años, 7 meses
Puntos: 2
Se supone que lo iba hacer poniendo un directorio a cada usuario y dentro de ese directorio la página que tiene que ver. El "validar.php" había pensado que estuviera fuera de los directorios. Y que una vez haga login le lleve a su directorio y página personal a cada usuario.

Pero todo esto son ideas mías que estoy bastante verde en php y ni siquiera se si se puede hacer así.

Deciros que es toda la página está en html, que no se si será relevante.

Gracias!
  #6 (permalink)  
Antiguo 14/09/2006, 08:32
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 19 años, 5 meses
Puntos: 1
Que tal, Ok no entiendo por que trabajas con txt pudiendo trabajar con una bd que es mas seguro y mas profesional, bueno lo que tienes que hacer es cambiar tu txt y colocarle una columna mas

Joe|1235|Administrador
Pedro|qwer|Usuario
Noe|Gty45e|Operador
kermit|rwe4v|Etc
Código PHP:
<?php  
     
if (!isset($_SERVER['PHP_AUTH_USER'])) { 
        
header('WWW-Authenticate: Basic realm="Acceso restringido"'); 
        
header('HTTP/1.0 401 Unauthorized'); 
        echo 
'Authorization Required.'
        exit; 
    } 
     
    
$fich file("passwords.txt"); 
    
$i=0$validado=false
    while (
$fich[$i] && !$validado) { 
        
$campo explode("|",$fich[$i]); 
        
$nivel=$campo[2];
        if ((
$_SERVER['PHP_AUTH_USER']==$campo[0]) && ($_SERVER['PHP_AUTH_PW']==chop($campo[1]))) $validado=true
        
$i++; 
    } 

    if (!
$validado) { 
        
header('WWW-Authenticate: Basic realm="Acceso restringido"'); 
        
header('HTTP/1.0 401 Unauthorized'); 
        echo 
'Authorization Required.'
        exit; 
    } 

// Ejemplo: Se asume que tu usuario página será: nombre_usuario.php .. 
switch ($nivel)
{
    case
"Administrador":
       
header ("Location: "pagina_para_el_dministrador.php");
    break;
    case"
Usuario":
       header ("
Location"pagina_para_usuarios.php");
    break;
    case
"Operador":
       
header ("Location: "pagina_para_operadores.php");
    break;
    default:
       header ("
Location"pagina_para_el_resto.php");
}

?>
Espero que te sirva de ayuda...Saludos
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #7 (permalink)  
Antiguo 14/09/2006, 08:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
se me despliega una pequeña ventana tipo como cuando intentas entrar en el router vía web ( no se si sabes a cual me refiero) en la cual debo meter el user y la pass.
Se denomina "Autentificación HTTP" .. No todo "router" usa el mismo tipo de autentificación, no uses ese ejemplo más (así no nos confundimos).

-------------------

Yo realmente no usaría autentificación HTTP .. para este caso. Haz tus pruebas, una vez autentificado tu usuario y redirigido a su página concreta .. prueba a indicar por el URL la página de otro usuario "a ver que pasa".

Por mi parte usaría autentificación por sesiones. El procedimiento es el mismo .. uses un ".txt" (archivo de texto plano) o una BBDD para tener la información del "login" y "perfil" (u otras propiedades del usuario). Sólo que al validar a tu usuario creas una variable de sesión y esa la validas en los scripts/partes de los mismos que requieras autenficación. Conoces sesiones? .. www.php.net/session (tienes ejemplos en las FAQ's de este foro).

Lo que te tienes que decidir es como creas esos "directorios" por usuario: le das el mismo nombre de su "login"? .. o como los vas a identificar? .. Recuerda que en tu ".txt" sólo tienes un "nombre" (único) que lo identifique .. podrías usarlo como te presenté la solución ateriormente .. sólo que en el "Location" indica tu ruta al directorio en cuestión:

Código PHP:
header ("Location: ./".$_SERVER['PHP_AUTH_USER']."/"); 
Se asume que los "usuarios" estarían por debajo de tu script de login (así quedan protegidos por tu autentificación HTTP).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 15/09/2006, 08:43
moe
 
Fecha de Ingreso: septiembre-2006
Mensajes: 13
Antigüedad: 17 años, 7 meses
Puntos: 2
Gracias por las respuestas, aunque aún sigo teniendo problemas. :( snifff

* En el caso de jmqc me da el siguiente error haciendolo tal y como me aconseja

Parse error: parse error, unexpected T_STRING in D:\AppServ\www\ricon.es\cantabrico\validar.php on line 33

y corresponde a la línea donde pone

case"Administrador":
header ("Location: "pagina_para_el_dministrador.php"); << en esta
break;

* Para el caso de cluster :

Con el
Código PHP:
 header ("Location: ./".$_SERVER['PHP_AUTH_USER']."/"); 
Siempre me dice que no encuentra la página. Creo que no se bien como poner el directorio que me dices. Suponiendo que el usuario se llama "prueba" y el directorio al que accede también se llama "prueba" ¿cómo tendría que hacerlo?

El servidor lo tengo en local, uso appserv.

He ido probando con todas las opciones lógicas que se me han ido ocurriendo
localhost/prueba/
prueba/
c:/appserv/........../prueba

Además de todo eso poniendo prueba.php entre las comillas después de $_SERVER['PHP_AUTH_USER']."/");


Ayudita por favor, que estoy más perdido que el carro de Manolo Escobar.

Saludos.

P.D: después de conseguir esto me pongo con las sesiones y hacer un BBDD para los users, se que es más profesional, pero es que por el momento soy un poco chapucillas.
  #9 (permalink)  
Antiguo 15/09/2006, 09:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Le sobra una comilla en:
header ("Location: pagina_para_el_dministrador.php");

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 15/09/2006, 09:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Debería definir la estructura de tus directorios .. no sé donde tienes este script de validación y donde están los directorios de tus usuarios, ni como se llaman ni si tienes un "index.php" en ellos u otro archivo al que ir (en ese caso tendrás que indicarlo en el URL completo al que redireccionas).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 15/09/2006, 10:27
moe
 
Fecha de Ingreso: septiembre-2006
Mensajes: 13
Antigüedad: 17 años, 7 meses
Puntos: 2
Quitando la comilla que me dices sigue sin funcionar, no me da el error pero no encuentra la página que le indico. :(

Y respondiendo a tus preguntas de antes, te comento a ver si me puedes guiar :

El sitio está todo en html.

Su estructura es la siguiente (pero si es mejor cambiarla me lo dices que no hay problema y la cambio):

* directorio raiz\ (aqui tengo los hmtl de la página: index.html, sección1.html, sección2.html, validar.php, password.txt, etc)

El php con el script de validación (validar.php) con las contraseñas (password.txt) están en el directorio raiz, el mismo que las páginas.

Entonces había pensado ( si puede ser claro, si no me dices como sería mejor)que cada usuario tubiera una carpeta dentro del directorio raiz y dentro de ella las páginas que debe de ver, y así pues quedaría estructurado el sitio ed la siguiente manera.

* directorio raiz\ usuario1\ pagina_usuario1.php
* directorio raiz\ usuario2\ pagina_usuario2.php
* directorio raiz\ usuario2\ pagina_usuario2.php

y así sucesivamente.

Lo que también me gustaría saber si la pagina a la que hay que redireccionar tiene que ser php o valdría en html.

Un saludo!! Gracias!

P.D: se me olvidaba que el directorio raiz (document root) está en modo local en mi pc, lo que quiere decirse que está ubicado en c:\appserv\www\ y por internet tecleo en el navegador midominio.com y ya salé el index.html
  #12 (permalink)  
Antiguo 15/09/2006, 10:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
ok .. pero lo normal es que cada usuario tenga su index.php própio:

directorio raiz\ usuario1\ index.php o index.html .. da igual

Así puedes apuntar tu redirección simplemente como te comenté .. Si vas a usar "pagina_usuario1.php" .. no tienes por ningún lado la relación de ese nombre de "página" (en tu .txt de registro de usuarios) por eso es más "sano" hacerlo como te comento y cuando puedas (creo que ya habrías terminado usando sesiones y una BBDD tu sistema) migras hacia "sesiones".

Como prueba . .verifica que la ruta dada "dinámica" es correcta:

Código PHP:
$redir="./".$_SERVER['PHP_AUTH_USER']."/";
die(
$redir);
header ("Location: ".$redir); 
Uso "die()" para que veas la ruta que ahí se te deve devolver (para que verifiques que sea correcta). Cuando creas que es correcta, quita el "die()" y ejecuta tu código.

Cita:
P.D: se me olvidaba que el directorio raiz (document root) está en modo local en mi pc, lo que quiere decirse que para acceder a él sería c:\appserv\www\
para eso la variable:

$_SERVER['DOCUMENT_ROOT']

Da ese valor en cualquier servidor (que corra Apache). Pero aquí "redireccionas" por HTTP así que lo que necesitas es algo como: http://localhost/usuario/....

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 16/09/2006, 05:10
moe
 
Fecha de Ingreso: septiembre-2006
Mensajes: 13
Antigüedad: 17 años, 7 meses
Puntos: 2
Bueno pues he conseguido lo que pretendía de la siguiente manera:

Código PHP:
<?php 
if($_SERVER['PHP_AUTH_USER']=='') { 
header("WWW-Authenticate: Basic realm=\"Acceso Restringido\""); 
header("HTTP/1.0 401 Unauthorized"); 
echo 
''
exit; 
} else { 

if(
$_SERVER['PHP_AUTH_USER']=='USER_1'&&$_SERVER['PHP_AUTH_PW']=='CONTRASEÑA_1') { 
header("Location: htp://tudominio/index.php"); 
} else { 
echo 
''


if(
$_SERVER['PHP_AUTH_USER']=='USER_2'&&$_SERVER['PHP_AUTH_PW']=='CONTRASEÑA_2') { 
header("Location: htp://tudominio/index.php"); 
} else { 
echo 
''

exit; 


?>
EDITO: si alguien quisiera usar esta forma de validacion le faltaría poner bien el http con su dirección correspondiente en el
header("Location: ");
no me dejaba colgarlo, por que no llego al mínimo de post :).



Pero tengo las siguientes preguntas:

1.- ¿Este script es menos seguro que el otro? El usuario y la contraseña van en el mismo script y no se si es más seguro tener los user/pass en el txt como antes. ¿O da igual tiene la misma poca seguridad que el otro?

(no me digais una BBDD :) que lo siguiente que usaré será eso junto con inicio de sesiones para dar más seguridad porque si conocen tu enlace directo como dice cluster se meten sin pasar por la validación)

2.- A este script que uso ahora le hecho en falta en comparación al otro, que te deje meter el usuario erróneo hasta 3 veces y si fallas las 3 te de un mensaje de usuario no autorizado o lo que quieras poner.

¿Me podríais guiar un poquillo de como hacerlo? He probado alguna cosa fijándome del otro script del principio pero no doy con ello por el momento.

Gracias cluster y jmqc por atender mis dudas vuestros consejos sirven de mucho!

Un saludo!

Última edición por moe; 16/09/2006 a las 05:17
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:33.