Foros del Web » Programando para Internet » PHP »

error en autentificacion

Estas en el tema de error en autentificacion en el foro de PHP en Foros del Web. hola amigos tengo el siguiente scripts: -------------------------usuarios.php---------------------------- Código PHP: <?php $ventas  = array(  "leon"  =>  "leon" , "seba"  =>  "seba" , "bruno"  =>  "bruno" ); $tecnico  ...
  #1 (permalink)  
Antiguo 16/02/2003, 21:15
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
error en autentificacion

hola amigos tengo el siguiente scripts:

-------------------------usuarios.php----------------------------
Código PHP:
<?php
$ventas 
= array( "leon" => "leon","seba" => "seba","bruno" => "bruno");
$tecnico = array( "fede" => "fede","otro" => "pass2","otro1" => "pass3");
?>
--------------------------control.php------------------------------
Código PHP:
<?php
include ("usuarios.php");
//vemos si el usuario y contraseña es váildo
if ($ventas[$_POST["usuario"]] == $_POST["contrasena"]) {
       
session_start(); ///iniciamos la sesion
      
session_register("autentificado"); ///la registramos
      
$autentificado "SI";
      
header ("Location: lectura.php"); ///le damos acceso a la pagina
      
exit;
}
if (
$tecnico[$_POST["usuario"]] == $_POST["contrasena"]) {
       
session_start(); ///iniciamos la sesion
      
session_register("autentificado"); ///la registramos
      
$autentificado "SI";
      
header ("Location: tecnico.php"); ///le damos acceso a la pagina
      
exit;
}
else {
  
header("Location: index.php?errorusuario=si"); // hubo un error lo mandamos para que se logue nuevamente
  
exit;
}
?>
me da los siguientes errores:
Cita:
Warning: Cannot send session cache limiter - headers already sent (output started at c:\appserv\www\inticomp\seguridad_inticomp\control .php:7) in c:\appserv\www\inticomp\seguridad_inticomp\control .php on line 18

Warning: Cannot add header information - headers already sent by (output started at c:\appserv\www\control.php:7) in c:\appserv\www\control.php on line 21
osea en la siguientes lineas:
Cita:
session_start(); ///iniciamos la sesion
en en la linea:
Cita:
header ("Location: tecnico.php"); ///le damos acceso a la pagina
si alguien sabe algo.....se lo agradeceria.
Desde YA Muchas Gracias!
  #2 (permalink)  
Antiguo 16/02/2003, 22:31
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
el session_start() deb ir al principio del script osea:

Código PHP:
<?php

session_start
(); ///iniciamos la sesion


include ("usuarios.php");
//vemos si el usuario y contraseña es váildo
if ($ventas[$_POST["usuario"]] == $_POST["contrasena"]) {
       
      
session_register("autentificado"); ///la registramos
      
$autentificado "SI";
      
header ("Location: lectura.php"); ///le damos acceso a la pagina
      
exit;
}
if (
$tecnico[$_POST["usuario"]] == $_POST["contrasena"]) {
       
      
session_register("autentificado"); ///la registramos
      
$autentificado "SI";
      
header ("Location: tecnico.php"); ///le damos acceso a la pagina
      
exit;
}
else {
  
header("Location: index.php?errorusuario=si"); // hubo un error lo mandamos para que se logue nuevamente
  
exit;
}
?>

lo pones al principio y una sola ves.

www.php.net/manual/es/function.session-start.php


Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #3 (permalink)  
Antiguo 16/02/2003, 22:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Me imagino q estaras haciendo algo tipo:

<html>
<head>
</head>
<body>
<?php
// El código q has puesto
?>
</body>
</html>

Bien .. si es eso .. Acuerdate que PHP se procesa en el servidor .. y el resultado de este se envia al navegador .. caso por ejemplo de algun echo via PHP o print .. o mas HTML incrustado de tu página ..

Cuando se usa session_start() o header() NO ha de existir nada de HTML por delante de esas funciones .. SI usas ese código en un unico script q hace ese proceso . el HTML q estaras usando como en el ejemplo q puse NO es necesario ni corresponde .. TU escritp procesa tooodoo en el servidor . el unico instante q necesita del "cliente" (del navegador) es en el momento de hacer la redirección q usas (header .... location) .. q le indicará al navegador q página ha de cargar/llamar ...

Si no tienes nada de HTML por delante de ambos scripts q usas (incluido el "include" q llamas en control PHP .. Asegurate q no tengas ni un espacio antes de <?php .. ni un salto de linea antes de <?php (en ambos scripts) .. Todo eso es considerado tambien como "envio de cabeceras" y probocan dicho error.

Un saludo,
  #4 (permalink)  
Antiguo 16/02/2003, 22:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
MSDark ..

El session_start() puede ir dentro de tu programación PHP donde quieras .. El requisito es que NO exista nada de HTML antes de dicha funcion o de header() por ejemplo tambien ...

Es mas . como lo tiene originalmente fmmeson es correcto .. Si chekea si las variables entran por POST (de sus formularios de login ..) y se contrastan con su array de usuarios .. Si es correcto se inicia la session y se crean las variables de session q el usa.

Si inicias la session al principio del script .. estas creando un archivo de session (con su SID correspondiente) SIN datos .. pues caso de no validar al usuario no se usaría la session.

Un saludo,
  #5 (permalink)  
Antiguo 16/02/2003, 23:10
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
no se que es!

cluster.....no tengo nada delante de HMTL delante de estos scripts...la verdad me sigue dando error
tengo:
session.use_cookies = 0
session.use_trans_sid = 1
puede ser que el error venga por ahi , o sea que el SID no se pueda propagar????
  #6 (permalink)  
Antiguo 16/02/2003, 23:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Revisa bien los espacios y saltos de linea antes de tus <?php de ambos scripts q usas (el padre y el q llamas por el include) .. en alguno estas metiendo algun salto de linea o espacio delante ..

A todo esto .. esas directivas:
session.use_cookies = 0
session.use_trans_sid = 1

Quieres decir q las estas usando via un ini_set() ..?¿

Un saludo,
  #7 (permalink)  
Antiguo 16/02/2003, 23:22
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
Ups! disculpa mi equivocacion


Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #8 (permalink)  
Antiguo 16/02/2003, 23:55
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
tenias razon cluster (otra vez)

eran espacios en BLANCO que me quedaban al final de usuarios.php despues de cerrar ?>

Asi que Gracias Otra Vez!
  #9 (permalink)  
Antiguo 17/02/2003, 18:53
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
Archivo de Seguridad

hola amigos.....mas o menos continuando con el tema:
tengo este scripts:
-------------------------------seguridad.php---------------------------------
Código PHP:
<?php
//TOMO VARIABLES DE SESION SOBRE LA AUTENTIFICACION
session_start();
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($HTTP_SESSION_VARS['autentificado'] != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: index.php");
//ademas salgo de este script
exit();
}
?>
con EL controlo que no se pueda ingresar a las paginas, con tan solo poner la direccion de la pagina restringida en el navegador........pero tengo un pequeño problema cuando hago un:
Código PHP:
<?php include("seguridad.php"); ?>
en la pagina que quiero proteger......no puedo ingresar desde el formulario de logueo......pero si lo saco....todo anda perfectamente!!!!......si alguien sabe algo se lo agradeceria.

Desde Ya Muchas Gracias!
  #10 (permalink)  
Antiguo 17/02/2003, 22:32
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
ademas les cuento que tengo mi PHP.INI asi:

session.use_cookies = 0
session.use_trans_sid = 1

uso php 4.2.3

y no logro ver el SID en la URL de mi navegador.....si alguien sabe algo al respecto se lo agradeceria

Desde Ya Muchas Gracias!!
  #11 (permalink)  
Antiguo 18/02/2003, 10:35
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
sera que algo del scripts esta mal??? alguna idea???

Desde Ya Muchas Gracias!
  #12 (permalink)  
Antiguo 18/02/2003, 15:48
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

No soy ningun experto en sesiones, es casi nunca las he usado (por no necesitarlas). Pero por lo que veo lo tienes configurado para no pasar el sid por cookies. Y creo que lo de pasar transparentemente el sid por url solo sirve para reescribir los links del codigo HTML. CREO que no afecta al header ("Location: "). Prueba a poner:
Código PHP:
header ("Location: lectura.php?SID");
exit; 
en el codigo que procesa el formulario de logeo.

Como ya te he dicho, no trabajo con sesiones, asi que lo que te he dicho es meramente intuicion. Pruebalo y comentas que pasa. Y si algun defensor a ultranza de las sesiones lee este mensaje y puede echar luz al asunto, mejor.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 18/02/2003, 18:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si propagas el SID en modo automatico como así lo estas usando .. pero NO en una cookie .. Los <TAG> HTML que se reescriben (por parte de PHP) para añadir el SID son los que define la directiva:

url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fields et="
(links, formularios, se añaden campos hidden con el SID en formulario, etc ..)

Como veras .. son Tag HTML q PHP "reescribe" antes de enviarselo al navegador ...

El caso q hacer un "header("location ...")" no es un tag HTML q sobreescriba PHP .. Por lo tanto tienes q propagar el SID a mano en ese caso concreto.

Lo puedes hacer via el ejemplo de josemi .. o usando:

Código PHP:
$miSID=session_name()."=".session_id();
header("Location: pagina.php?$miSID"); 
Un saludo,
  #14 (permalink)  
Antiguo 19/02/2003, 08:19
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
hola amigos.....GRACIAS CLUSTER Y JoSEmi ....mas o menos continuando con el tema:
tengo este scripts:
-------------------------------seguridad.php---------------------------------


Código PHP:
<?php
//TOMO VARIABLES DE SESION SOBRE LA AUTENTIFICACION
session_start();
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($HTTP_SESSION_VARS['autentificado'] != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: index.php");
//ademas salgo de este script
exit();
}
?>
con EL controlo que no se pueda ingresar a las paginas, con tan solo poner la direccion de la pagina restringida en el navegador........pero tengo un pequeño problema cuando hago un:


Código PHP:
<?php include("seguridad.php"); ?>
en la pagina que quiero proteger......no puedo ingresar desde el formulario de logueo......pero si lo saco....todo anda perfectamente!!!!......si alguien sabe algo se lo agradeceria.

Desde Ya Muchas Gracias!
  #15 (permalink)  
Antiguo 05/04/2003, 19:20
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
---------------------------pass.php-------------------------------
Código PHP:
<?php
$downwarez 
= array( "fmmeson" => "fede");
?>
-------------------------control.php-----------------------
Código PHP:
<?php
include ("pass.php");
if (
$downwarez[$_POST["usuario"]] == $_POST["contrasena"]) {
       
session_start(); ///iniciamos la sesion
      
$_SESSION['autentificado']="si"///la registramos
      
$SID=session_name()."=".session_id();
    
header("Location: administracion.php?$SID");///le damos acceso a la pagina
      
exit;
}
else {
    
header("Location: login.php?errorusuario=si"); // hubo un error lo mandamos para que se logue nuevamente
      
exit;
}
?>
-------------------------------seguridad.php----------------------------
Código PHP:
<?php
session_start
();
if ( 
$_SESSION['autentificado'] != "si") {
header("Location: login.php");
exit;
}
?>
al colocar
Código PHP:
<?php
include ("seguridad.php");
?>
en las paginas que quiero proteger......no me permite verlas pero al sacarlo todo anda ok!!! no se que puede ser!!!! que podria ser???? ALGUNA IDEA???????
  #16 (permalink)  
Antiguo 05/04/2003, 21:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero como es la secuencia de páginas que ejecutas en tu sistema de sesiones? ..

Recuerda que las sessiones se basan en que se propage el SID de la sesion .. así que en todas las paginas que requieras el uso de ese "seguridad.php" q se basa en sesiones has de llegar a el con un SID válido y en curso ..

Si en alguna secuencia de "salto" entre páginas te dejas el SID sin propagar la session será una nueva a efectos de tu "seguridad.php" y por ende no te dejará pasar tu validación ..

En resumen ..
De tu página administracion.php que saltas tras pasar por control.php has de saltar a otras páginas que requieran de autentificación por un link o formulario que se propague el SID en el ..

Unos mensajes mas arriba se habló de la directiva del php.ini:
session.use_trans_sid = 1

La cual hace ese trabajo de propagar el SID por tí envitando que tengas que hacerlo tu en cada link o formulario (en un campo hidden ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 06/04/2003, 15:17
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
hola cluster......mira entro a mi formulario login.php.....su action esta direcciononado a control.php que es el encargado de controlar y validar a los usuarios......si entro correctamente con la contraseña.....este utiliza un header("administracion.php"); para enviarlo inmediatamente.......el problema surge cuando le hago un include("seguridad.php"); a administracion.php .......como si fuer< que no esta tomando la variable de session

mi php.ini esta seteado asi:

session.use_trans_sid = 1
session.use_cookies = 0

eh pasado de utlizar las variables globales "tradicionales" a las "superglobales" pero sigo con problemas

si alguien sabe algo se lo agradeceria.......Desde YA Muchas Gracias
  #18 (permalink)  
Antiguo 06/04/2003, 22:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Cuando haces un:

header("location: algunapagina.php");

Le pasas el SID? .. Deberías hacerlo igual que en: control.php

Código PHP:
$SID=session_name()."=".session_id();
header("Location: administracion.php?$SID"); 

A todo esto .. comprueba que $SID toma antes de enviarse a tu página y cuando llega a la página destino ..

Si tienes acceso a tu directorio donde PHP guarda las sessioens (session.save_path) .. puedes verlo ahí mismo el SID (ID en concreto) que se genera y ver incluso sus datos editando el archivo .. Con eso puedes comprobar si en la página destino en tu seguridad.php (justo despues del session_start() ..) que $SID tienes (si llegó el SID propagado de la anterior página o se ha generado uno nuevo por no llegar el SID anterior) ..

Si no tiens acceso al S.O. para ver eso .. tendras que guardarte ese dato (el $SID) en un archivo de texto plano (fopen() .. fwrite() por ejemplo) o incluso controlar el buffer de salida de PHP (funciones ob_start() y afines) para poder verlo .. (me refiero en este caso al SID de origen; el destino no es necesario ..)

Por otro lado .. la directiva:
url_rewriter.tags

Tan solo "reescribe" los TAG HTML que se indiquen .. pero no una sentecia de "cabeceras HTTP" como es la de header() en ese caso concreto (si no se usa propagación del SID por cookie como es tu caso) hay que hacerlo manualmente ...

Un saludo,

pd: (que versión de PHP usas?)
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #19 (permalink)  
Antiguo 07/04/2003, 09:54
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
ya pude solucionar el tema....casi me suicido!!...... el problema se debia a una MALA configuracion por "defecto" estaba asi:
Cita:
; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
session.save_path = /temp
entonces al parecer la el SID se perdia y nunca llegaba al scripts donde debia validarse..........lo que tuve que hacer es cambiar el path hacia la carpeta "session" que se encuentra dentro de la carpeta "php" y quedo asi:
Cita:
; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
session.save_path = c:\servidor/php/session
Gracias Cluster....por la ayuda! ya no sabia que podia! pero por suerte todo salip bien........ah la version de php es la php 4.3.0

Saludos!
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 10:36.