Foros del Web » Programando para Internet » PHP »

restrigir la entrada a ciertas secciones si utilizo un *.txt para guardar user i pass

Estas en el tema de restrigir la entrada a ciertas secciones si utilizo un *.txt para guardar user i pass en el foro de PHP en Foros del Web. tengo este codigio para poder logear i puedan acceder a un pagina: <?php if (!isset($_POST["usuario"])) { } $fich = file("passwords.txt"); $i=0; $validado=false; while ($fich[$i] && ...
  #1 (permalink)  
Antiguo 15/06/2005, 05:18
 
Fecha de Ingreso: mayo-2005
Mensajes: 23
Antigüedad: 18 años, 10 meses
Puntos: 0
restrigir la entrada a ciertas secciones si utilizo un *.txt para guardar user i pass

tengo este codigio para poder logear i puedan acceder a un pagina:
<?php

if (!isset($_POST["usuario"])) {

}

$fich = file("passwords.txt");
$i=0; $validado=false;
while ($fich[$i] && !$validado) {
$campo = explode("|",$fich[$i]);
if (($_POST["usuario"]==$campo[0]) && ($_POST["contrasena"]==chop($campo[1]))) $validado=true;
$i++;


header ("Location: indexprova.php");
}

if (!$validado) {
header("Location: login.php?errorusuario=si");
exit;
}
?>
esto en verdad no sirve de nada si la gente se sabe la url de la pag i de las secciones antes de pasar por el log.
si yo registro a le gente con un user i pass en un *.txt:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?
$i="|";
$usuario=$_POST['usuario'];
$contrasena=$_POST['contrasena'];
$archivo=fopen("passwords.txt","a");
fputs($archivo,"\n".$usuario.$i.$contrasena);

fclose($archivo);
echo "tu usuario es: $usuario <br>";
echo "tu contraseña es: $contrasena <br>";
?>
</body>
</html>

como puedo hacer para que la gente no se pueda saltar el logeo i no puedan entrar en los demas sitios si no estan logeados, espero que me podais ayudar i no me borreis mis pots sin saber el porque o almenos explicar cual es la politica para la durada de los pots. gracias por todo
  #2 (permalink)  
Antiguo 15/06/2005, 05:29
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Como cualquier sistema... usa sesiones. Consulta las FAQ al respecto.... y el bscador del foro (sería igual que cualquier loguins... solo que los datos provienen de un archivo)... y la documentación oficial: www.php.net/session

Solo por curiosidad... ¿por qué un archivo y no una BD?

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 15/06/2005, 05:48
 
Fecha de Ingreso: mayo-2005
Mensajes: 23
Antigüedad: 18 años, 10 meses
Puntos: 0
porque no tengo bd i he intentado instalar el mysql i no me funcionaba o no lo he sabido instalar. pero con que soy principiante voy poco a poco i cuando vaya sabiendo mas podre complicar las cosas. pero no se si es mas facil con bd o con un archivo. gracias por tu ayuda
  #4 (permalink)  
Antiguo 15/06/2005, 06:09
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Lástima... no solo es más complicado (proporcionalmente es una gran diferencia ).. con una BD tendrás más seguridad y eficiencia en sistemas como este... tan simple como que está pensado para "acciones" (no encuentro ahora la palabra) como esta...

Pero bueno... mucha suerte...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 15/06/2005, 07:06
 
Fecha de Ingreso: diciembre-2004
Mensajes: 45
Antigüedad: 19 años, 4 meses
Puntos: 0
Se que parece largo, pero vale la pena leerlo, porque funciona en verdad.
Yo tuve el mismo problema, y me tomo un tiempo poder hacerlo, pero al fin lo termine:
Primero los datos del login se guardan en dos cookies, una para el user y otra para el password:
verifica.php

Código PHP:
<?
$login
="$_POST[login]";
$talvez="$_POST[talvez]";
include 
"fas.php";

if (${
$login}==$talvez && $login!=NULL && $talvez!=NULL){

setcookie("usuario",$login);
setcookie("pwd",$talvez);
print 
"<html><body><a href=\"cuerpo.php\">Si la pagna no se redirecciona en unos instantes, haga click aqui.</a></body></html>"
}

else {print 
"Passwor incorrecta, vuelva atras e intentelo nuevamente";
print 
"<html><body><a href=\"http://simplydocs.siteburg.com/\">Intentelo nuevamente aqui</a></body></html>";}
?>
en el archivo fas.php estan todos los usuarios con sus respectivos password, de la siguiente forma:
fas.php
Código PHP:
<? $pepe ="password1";?>
<? $juancho 
="password2";?>
<? $jorge 
="password3";?>
luego va a la pagina principal:
cuarpo.php
Código PHP:
<html><head>
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</head></html>
<?
include "veri2f.php";
include 
"fas.php";
if (
$a==NUL  || $b==NULL){
print 
"<html><body><h1>Uusario no registrado</h1></body></html>";
}
else {
if (${
$a}==$b){

include 
"cuerpo2.php";

}
else {print 
"<html><body><h1>Uusario no registrado</h1></body></html>";}}
?>
En este punto si las cookies existen, o sea que el usuario esta registrado entonces incluye al archivo cuerpo2.php, el cual contiene todo el contenido de la pagina web.
Pero si la cookie no existe, no podra ver nada.
Para verificar si la cookie existe uso los archivos veri2f.php y fas.php:
veri2f.php

Código PHP:
<?
$a 
$_COOKIE["usuario"];
$b $_COOKIE["pwd"];
?>
y luego cuando el usuarios se quiera ir le da click al boton que te lleva al siguiente link para cerrar la sesion:
lugout.php
Código PHP:
<?
setcookie
("usuario");
setcookie("pwd");
header ("Location: index.php");
?>
Y si el usuario cierra la ventana de la pagina, entonces la cookie se borrara sola.
Espero que te sirva.

Saludos.

Última edición por juanitoelisto; 15/06/2005 a las 07:18
  #6 (permalink)  
Antiguo 15/06/2005, 07:21
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Iniciado por juanitoelisto
(...) los datos del login se guardan en dos cookies, una para el user y otra para el password:
Felicidades por tu código ... pero he de decirlo... no es nada seguro... ni 100% funcional... núnca lo será si te basas en cookies.... Ve que estas guardando información tan importante como loguin y passwords en la maquina de tu visitante... a la mano y vista de cualquiera... eso NO debiera de ser... además de que tu visitante (por cuestiones de seguridad precisamente) puede tener desactivadas las cookies... ¿qué pasa ahí??...

No desprestijio tu trabajo.. por el contrario, se ve bien (solo de reojo)... pero temo que no es seguro... lo que sí me pareció buena idea es la de manejar los users y password en un archivo .php para ser incluido... aúnque con esa simpléza es fácilmente violable.. podrías crear una constante para que solo sea leido desde tu script y eso le daría un algo de seguridad... pero definitivamente es muuuucho mejor (por simpleza y ahorro de procesos) que manejar archivos .txt... ...

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 16/06/2005, 03:39
 
Fecha de Ingreso: mayo-2005
Mensajes: 23
Antigüedad: 18 años, 10 meses
Puntos: 0
gracias por el codigo, pero a mi me da errores ahora te pondre lo que me pone. cuando un login con el:
<html>
<head>
<title>Autentificación PHP</title>
</head>
<body>
<h1>Autentificación PHP</h1>
<form action="verifica.php" method="POST">
<table align="center" width="225" cellspacing="2" cellpadding="2" border="0">
<tr>
<td colspan="2" align="center"
<?if ($_GET["errorusuario"]=="si"){?>
bgcolor=red><span style="color:ffffff"><b>Datos incorrectos</b></span>
<?}else{?>
bgcolor=#cccccc>Introduce tu clave de acceso
<?}?></td>
</tr>
<tr>
<td align="right">USER:</td>
<td><input type="Text" name="login" size="8" maxlength="50"></td>
</tr>
<tr>
<td align="right">PASSWD:</td>
<td><input type="password" name="talvez" size="8" maxlength="50"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="Submit" value="ENTRAR"></td>
</tr>
</table>
</form>
</body>
</html>

que ataca al verifica me da este error:

Warning: Cannot add header information - headers already sent by (output started at /var/www/sete/fas.php:2) in /var/www/sete/verifica.php on line 8

Warning: Cannot add header information - headers already sent by (output started at /var/www/sete/fas.php:2) in /var/www/sete/verifica.php on line 9
Si la pagina no se redirecciona en unos instantes, haga click aqui.


I si le clico en el el "Si la pagina no se redirecciona en unos instantes, haga click aqui. " me enviar al cuerpo.php y entonces me da este error:


Warning: Failed opening 'veri2f.php' for inclusion (include_path='.:/usr/share/pear') in /var/www/sete/cuerpo.php on line 9

Uusario no registrado


Espero que me podais solucionar el problema.no se si es porque no tengo las cookies activas o no. gracias por vuestra ayudar
  #8 (permalink)  
Antiguo 16/06/2005, 04:05
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
... como recomendación/consejo... procura iluminar el código... y menciona cuáles son las líneas implicadas en los errores que te aprecen, cambios que hayas hecho y demás... para poder ayudarte mejor...

Así solo te puedo decir que los 2 primeros errores son porque haz de estar mandando a imprimir algo junto con header()... y eso no puede ser: www.php.net/header

Dicho en español... en un script donde incluyas la función header() no haz de mostrar nada de HTML... por ejemplo, esto sería un error:
Código PHP:
....<body>
<?php
header
("...");
?>
</body>....
... en el código que te dejaron solo veo dicha función en el archivo lugout.php ... y como verás dicho archivo no tiene ninguna salida a pantalla.. se llega a él mediante un enlace... ni es incluido en un archivo con salida.. ni nada de nada...

Busca en el foro por el error y hayarás mayores referencias.....

Y el último error... es senciilo, la ruta del archivo a incuir es incorrecta... si lo tienes tal como te lo pasaron los archivos deben estar en la misma carpeta... aunque parece tú le hiciste algo ¿?... por ello es importante menciones lo que te dije al inicio... practicamente se está adivinando así...

... acabo de leer que se ocupa la palabra "sesión" con algo así.... propiamente eso es falso ... pero bueno...

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #9 (permalink)  
Antiguo 16/06/2005, 05:56
 
Fecha de Ingreso: mayo-2005
Mensajes: 23
Antigüedad: 18 años, 10 meses
Puntos: 0
lo siento ahora pondre el codigo implicado de los errores:

Warning: Cannot add header information - headers already sent by (output started at /var/www/sete/fas.php:2) in /var/www/sete/verifica.php on line 8

Warning: Cannot add header information - headers already sent by (output started at /var/www/sete/fas.php:2) in /var/www/sete/verifica.php on line 9
Si la pagina no se redirecciona en unos instantes, haga click aqui.

el codigo de verifica.php es :
1-<?
2-$login="$_POST[login]";
3-$talvez="$_POST[talvez]";
4-include "fas.php";
5-
6-if (${$login}==$talvez && $login!=NULL && $talvez!=NULL){
7-
8-setcookie("usuario",$login);
9-setcookie("pwd",$talvez);
print "<html><body><a href=\"cuerpo.php\">Si la pagina no se
redirecciona en unos instantes, haga click aqui.</a></body></html>";
}

else {print "Passwor incorrecta, vuelva atras e intentelo nuevamente";
print "<html><body><a href=\"login1.php\">Intentelo nuevamente aqui</a></body></html>";}
?>


i si le doy a lo del Si la pagina no se redirecciona en unos instantes, haga click aqui.

me da este error:

Warning: Failed opening 'veri2f.php' for inclusion (include_path='.:/usr/share/pear') in /var/www/sete/cuerpo.php on line 8

Uusario no registrado


i el codigo del cuerpo.php es:

<html><head>
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</head></html>
<?
8-include "veri2f.php"; include "fas.php";
if ($a==NUL || $b==NULL){
print "<html><body><h1>Uusario no registrado</h1></body></html>";
}
else {
if (${$a}==$b){

include "cuerpo2.php";

}
else {print "<html><body><h1>Uusario no registrado</h1></body></html>";}}
?>



i todos los archivos estan en la misma carpeta
  #10 (permalink)  
Antiguo 16/06/2005, 07:56
 
Fecha de Ingreso: diciembre-2004
Mensajes: 45
Antigüedad: 19 años, 4 meses
Puntos: 0
A este script lo hice porque no tenia ni tengo tiempo de aprender MySQL, y por lo tanto, eso es lo unico que pude hacer. Gracias por los consejos, los tendre en cuanta para el futuro.

En cuanto al problema de sete 81:
Pon en el foro en codigo fuente del archivo fas.php, puesto que parece que alli esta el error.
De otra manera, todos los archivos deben estar en la misma carpeta, o debes especificarles sus rescectivas rutas, y debes saber que las cookies deben ser enviadas desde la carpeta principal.
Y ademas, si lo estas haciendo desde un localhost, trata de asgurarte de configurar bien todos los archivos.

Saludos.
  #11 (permalink)  
Antiguo 17/06/2005, 02:17
 
Fecha de Ingreso: mayo-2005
Mensajes: 23
Antigüedad: 18 años, 10 meses
Puntos: 0
todos los archivos estan en la misma carpeta que es la del sete i estan bien referenciados.i ahora te pondre el archivo de fas.php:

<? $pepe ="password1";?>
<? $juancho ="password2";?>
<? $jorge ="password3";?>
<? $sete ="sete";?>
<? $a="a";?>
<? $b="b";?>
<? $c="c";?>

gracias por intentar ayudarme
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 09:30.