Foros del Web » Programando para Internet » PHP »

otra opción a las sesiones

Estas en el tema de otra opción a las sesiones en el foro de PHP en Foros del Web. Hola, queria saber si hay alguna otra forma de poder restringir el acceso a paginas que no sea por sesiones de usuarios pero si utilizando ...

  #1 (permalink)  
Antiguo 14/12/2006, 05:58
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
otra opción a las sesiones

Hola, queria saber si hay alguna otra forma de poder restringir el acceso a paginas que no sea por sesiones de usuarios pero si utilizando usuarios porque las sesiones me estan dando mogollon de problemas que si cookies que si tal, Gracias.
  #2 (permalink)  
Antiguo 14/12/2006, 08:22
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Re: otra opción a las sesiones

Las cookies. Son más simples.

1. Simplemente, la creas:

Código PHP:
setcookie ("MiCookie""Hola"); 
O bien.. la creas a partir de una condición (si la contraseña ingresada es la correcta, etc)

Código PHP:
if ($_POST['contrasena'] == "12345678") {

    
setcookie ("contra"$_POST['contrasena']);


2. para obtener el valor de la cookie, solo usa:

Código PHP:
 $_COOKIE['contra'
Código PHP:
 $contra $_COOKIE['contra'];
echo 
$contra// "Hola" 
3. Las cookies no pueden eliminarse, pero sí editarse. La vacías o le pones otro valor y ya está.

Código PHP:
setcookie ("contra"NULL); //NULL es vacio 
  #3 (permalink)  
Antiguo 14/12/2006, 10:52
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 4 meses
Puntos: 22
Re: otra opción a las sesiones

la verdad que si quieres trabajar sin sesiones y con usuarios pues se te va ser mas complicado por que tendrias que estar pasando las variables de idusuario en todas las paginas, en cambio con sesiones es mucho mas facil ya que solo lo creas una vez y puedes llamarlo en todas las paginas, bueno trata de leer mas sobre sesiones.
  #4 (permalink)  
Antiguo 14/12/2006, 12:04
 
Fecha de Ingreso: diciembre-2004
Mensajes: 163
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: otra opción a las sesiones

Cita:
Iniciado por ginitofl Ver Mensaje
la verdad que si quieres trabajar sin sesiones y con usuarios pues se te va ser mas complicado por que tendrias que estar pasando las variables de idusuario en todas las paginas, en cambio con sesiones es mucho mas facil ya que solo lo creas una vez y puedes llamarlo en todas las paginas, bueno trata de leer mas sobre sesiones.
con cookies no tendrias por que hacer esop.
  #5 (permalink)  
Antiguo 14/12/2006, 13:13
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

Pues no entiendo qué es lo complicado de las sesiones.
La única diferencia que hay desde el punto de vista del funcionamiento básico es que hay que poner session_start() en cada página en la que se quiera usar la sesión, pero luego funciona igual, solo que en vez de $_COOKIE se usa $_SESSION..
  #6 (permalink)  
Antiguo 14/12/2006, 13:35
 
Fecha de Ingreso: diciembre-2004
Mensajes: 163
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: otra opción a las sesiones

no hay nada de complicado :P pero el usuario queria saber otra forma de validar usuarios sin sesiones :P
  #7 (permalink)  
Antiguo 14/12/2006, 13:46
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

lo sé, pero me llamó la atención esto
Cita:
Iniciado por Javiglez
las sesiones me estan dando mogollon de problemas
y por eso quería saber cuáles son los problemas que está teniendo
  #8 (permalink)  
Antiguo 14/12/2006, 17:05
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Pues a mi me esta dando varios quebraderos de cabeza os lo puedo asegurar,ademas me da rabia porque no se si hice mal en desarrollar la pagina toda de forma local probando todo localmente y nada q a la hora de subirlo pues no consigo hacer que me funcione, he puesto el codigo pero nadie me ha ayudado....por eso toy un poco desanimadillo con las sesiones....En este hilo lo he explicado lo mejor que he podido pero no he conseguido nada..
http://www.forosdelweb.com/f18/configuracion-servidor-php-449412/
  #9 (permalink)  
Antiguo 14/12/2006, 17:27
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

Ah, bueno, pero es que eso no son sesiones....
Lo que estás haciendo es crear una sesión con cookies, pero en realidad es mucho más simple:

session_start();
luego ponés todas las variables que quieras en $_SESSION

para usar la sesión siempre tenés que poner session_start() una vez en cada página que la necesite.

Para destruir la sesión, necesitás que esté abierta (con session_start() )
y hacés

$_SESSION = array();
session_destroy()


Y listo, no hay más complicaciones que eso.
Además de que las 'verdaderas' sesiones guardan sus variables en el servidor, no en cookies.

Tampoco necesitás usar HTTP_*_VARS, es mejor usar las formas cortas ($_POST, $_GET, etc)

Las redirecciones las podés hacer con php mismo:
header('Location: pagina'); exit;

(el exit termina el programa, es recomendable porque de otro modo la ejecución continúa)

Y en cuanto al error de cabeceras, no podés tener nada, ni una línea en blanco, ni un espacio, ni nada antes de <?php
A veces puede ser que quede un caracter no visible antes de eso, me ha pasado al hacer conversiones de codificación...


En fin, saludos.
  #10 (permalink)  
Antiguo 14/12/2006, 17:39
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Gracias por la ayuda, corregi todos los errores de cabercera menos en la clase ingresar_admin donde establezco las cookies que no se xq me da, no se si lo que quiero es muy complicado, en panel_admin que es la pagina que ya quiero q este protegida con sesion si pongo lo de session_start porque incluyo la clase login_admin que es esta que es se supone donde inicializa..

Código:
<?php 
/*Guardar datos Administrador */
$loginCorrecto = false; 

$nickUsuarioL; 
$emailUsuarioL; 
$nombreUsuarioL; 
/*Copmprobaciono cookies" : */

if(isset($HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"])) 
{ 

session_start(); 
$_SESSION["autentificado"]= "SI"; 

 


/*resultado de nick y pass guardado por las cookies */

$result = mysql_query("SELECT * FROM Admin WHERE login='".$HTTP_COOKIE_VARS["usNick"]."' AND pass='".$HTTP_COOKIE_VARS["usPass"]."'"); 



if($row = mysql_fetch_array($result)) 
{ 

/*si los datos son correctos se actualizan las cookiees caducan a los 90 dias*/ 
 
setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000); 
setcookie("usPass",$HTTP_COOKIE_VARS["usPass"],time()+7776000); 
$loginCorrecto = true; 

$nickUsuarioL = $row["login"];  
$emailUsuarioL = $row["mail"]; 
}

else 
{ 
//Destruimos las cookies.
setcookie("usNick","x",time()-3600); 
setcookie("usPass","x",time()-3600); 
} 
mysql_free_result($result); 

} 
?>
A ver si saco esto adelante con vuestra ayuda y aprendo que se me esta atragantando...
  #11 (permalink)  
Antiguo 14/12/2006, 17:40
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

esta que he puesto es login_admin..
  #12 (permalink)  
Antiguo 14/12/2006, 17:52
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

Pegá el código de las demás páginas, así te podemos guiar para hacerlo sin errores. Veo que estás usando muchas cookies, que en realidad te están complicando...

Saludos y ¡vamos que sale!
  #13 (permalink)  
Antiguo 15/12/2006, 06:49
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Gracias avlin por tu ayuda, te lo voy a poner todo y mas o menos la idea que tengo para que veas lo que quiero hacer y el sistema y tal. Es un sistema para gestionar clientes y los documentos de esos clientes....el sistema lo maneja un adminsitrador que mediante su sesion dara de alta clientes documentos etc..luego los clientes una vez dados de alta se loguearan en la zona clientes y accederan a su propia sesion...
Bien el sistema de base de datos es este muy sencillo, creo las tablas y creo ya el administrador por defecto insertando datos en la tabla admin...
Código PHP:
$sql "CREATE TABLE Clientes ( 
dni VARCHAR (9) NOT NULL,
nombre VARCHAR (100) NOT NULL,
apellido1 VARCHAR (100) NOT NULL,
apellido2 VARCHAR (100) NOT NULL,
direccion VARCHAR (200) NOT NULL,
telefono INT (9) NOT NULL,
mail VARCHAR (50) NOT NULL,
login VARCHAR (100) NOT NULL,
pass  VARCHAR (100) NOT NULL,
pass2  VARCHAR (100) NOT NULL,
PRIMARY KEY (dni)
) TYPE = INNODB;"


//--------------------------------------------------------------------------------

$sql "CREATE TABLE Expedientes (
expediente INT (20) NOT NULL AUTO_INCREMENT,
nombre VARCHAR (50) NOT NULL,
fecha VARCHAR (20) NOT NULL,
direccion VARCHAR (200) NOT NULL,
dni VARCHAR (9) NOT NULL,
PRIMARY KEY (expediente),
INDEX (dni),
FOREIGN KEY (dni) REFERENCES Clientes(dni) 
) TYPE = INNODB;"
;
      
//----------------------------------------------------------------------------------------

$sql "CREATE TABLE Documentos(
id_documento VARCHAR (40) NOT NULL,
tipo VARCHAR (20) NOT NULL,
nombre VARCHAR (50) NOT NULL,
expediente INT (20) NOT NULL,
comentario VARCHAR (255),
PRIMARY KEY (id_documento),
INDEX (expediente),
FOREIGN KEY (expediente) REFERENCES Expedientes(expediente) 
) TYPE = INNODB;"
;
     
//-----------------------------------------------------------------------------------------
                    
      
$sql "CREATE TABLE Admin(

login VARCHAR (50) NOT NULL,
id int(11) NOT NULL,
pass VARCHAR (50) NOT NULL,
pass2 VARCHAR (50) NOT NULL,
mail VARCHAR (100) NOT NULL,
PRIMARY KEY (login)
) TYPE = INNODB;"
;           
 
//administrador por defecto
     
$sql "INSERT INTO Admin (login,pass,pass2,mail)
 VALUES ("

$sql .= "'****'"
$sql .= ",'****'"
$sql .= ",'****'";
$sql .= ",'****@******'"

$sql .= ")"
mysql_query($sql);     
?> 
Bien ahora ire al index de la aplicación que es donde pongo el administrador por defecto que he insertado al crear las tablas y me logueo. y hasta ahi bien, es un simple formulario donde paso a otra pagina los valores que meto con el metodo POST a ingresar_admin.php

index.html
Código:
<form id="form1" method="post" action="ingresar_admin.php">	
<fieldset class="clase1">
<legend>Identificaci&oacute;n</legend>
<label for="login">Login</label><input type="text" name="login" id="login" /><br />
<label for="pass">Password</label><input type="password" name="pass" id="pass" /><br />
</fieldset>
<fieldset class="clase1">
<legend>Acciones</legend>
<INPUT TYPE="submit" NAME="accion"  VALUE="Aceptar" > 
</fieldset>
</form>
Bien en esta clase ingresar_admin es donde recojo esos datos y donde establezco las odiosas cookiees y donde ya me da warnings al establecerlas (lo marco en negrita)...
ingresar_admin.php
Código PHP:
<?php 
ob_start
();
include(
"../conectarse_bd.php"); 
//$link=Conectarse(); 
function quitar($mensaje

$mensaje str_replace("<","&lt;",$mensaje); 
$mensaje str_replace(">","&gt;",$mensaje); 
$mensaje str_replace("\'","'",$mensaje); 
$mensaje str_replace('\"',"&quot;",$mensaje); 
$mensaje str_replace("\\\\","&#92",$mensaje); 
return 
$mensaje

if(
trim($HTTP_POST_VARS["login"]) != "" && trim($HTTP_POST_VARS["pass"]) != ""

/*Asi que continuamos suponiendo que todo este bien, ahora lo que hacemos es quitarle el html, 
apostrofe comillas y demas al nick y password enviados por el usuario para su comprobacion 
con la base de datos, para ello utilizamos la funcion quitar($mensaje) que explicamos antes, 
y guardamos las nuevas cadenas en dos nuevas variables:*/ 
$nickN quitar($HTTP_POST_VARS["login"]); 
$passN quitar($HTTP_POST_VARS["pass"]); 
/*Ahora ejecutamos una instruccion sql, en la cual le pedimos a la base de da
tos que de la tabla usuarios nos devuelva la fila cuyo nick corresponda por 
el enviado por el usuario: */
$result mysql_query("SELECT pass FROM Admin WHERE login='$nickN'"); 
if(
$row mysql_fetch_array($result)) 

/*Ahora continuamos con el proceso suponiendo que el usuario exista en la base de datos ahora 
debemos comprobar que el password sea correcto, para ello hacemos una simple comparacion, si 
es correcto continuamos de lo contrario mostramos el mensaje de password incorrecto: */
if($row["pass"] == $passN

//90 dias dura la cookie 
/*Ahora suponiendo que el password es correcto continuamos y lo proximo a hacer es establecer las 
cookies de nick y password (Las cuales nombramos "usNick"/"usPass" y contienen el nick y password
respectivamente) en la maquina del usuario, informamos que se ha realizado correctamente el login
y lo enviamos a la pagina principal
*/
[B]setcookie("usNick",$nickN,time()+7776000); 
setcookie("usPass",$passN,time()+7776000);  [/B]
ob_end_flush();
?> 
<SCRIPT LANGUAGE="javascript"> 
location.href = "panel_admin.php"; 
</SCRIPT> 
<? 

else 

?> 
<SCRIPT LANGUAGE="javascript"> 
location.href = "error.php"; 
</SCRIPT> 
<? 


else
    {
?> 
<SCRIPT LANGUAGE="javascript"> 
location.href = "error.php"; 
</SCRIPT> 
<? 
    
}
mysql_free_result($result); 

else 

?> 
<SCRIPT LANGUAGE="javascript"> 
location.href = "error.php"; 
</SCRIPT> 
<?  

mysql_close(); 
?>
En ingresar_admin incluyo conectarse_bd que es esta

Código PHP:
<?php
//Funcion que se conecta a la base de datos
function Conectarse()
{
    if (!(
$link=mysql_connect("server""base""pass")))
    {
        echo 
"Error conectando a la base de datos.";
        exit();
    }
    if (!
mysql_select_db("base",$link))
    {
        echo 
"Error de  la base de datos.";
        exit();
    }
    return 
$link;
}
$link=Conectarse();
//mysql_close($link); //cierra la conexion
?>
y por ultimo si todo esta bien si has puesto el administrador por defecto bien te manda a panel_admin pero si reconocerte en la sesión.... ademas de incluir conectarse_bd.php incluyo login_admin.php que es donde valido....no se si sera muy enrevesado..

Este es panel_admin.php
Código PHP:
<?php 
include("../conectarse_bd.php");
include(
"../login_admin.php"); 

?>
<div id="Contenedor">
<div id="Capa_titulo">
<div id="logo" onclick="location='../index.html'" title="Inicio" ></div> 
</div>
<div id="Capa_panel">

  <div align="center">
    <p>
<?php 
$result 
mysql_query("SELECT * FROM Admin WHERE login='".$HTTP_COOKIE_VARS["usNick"]."' AND pass='".$HTTP_COOKIE_VARS["usPass"]."'");
while(
$row mysql_fetch_array($result)) {
        
printf("<tr><td><td>  %s</td><td><td>  %s </td><td> </tr>"$row["nombre"],$row["apellido1"], $row["apellido2"]);
    }
if(
$loginCorrecto


echo 
"<p style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 11px;color: #000000; font-weight: bold; float:right;'  > Bienvenido Administrador $nickUsuarioL </p>";

else 

echo 
"Bienvenido visitante, el sistema no te ha reconocido, sino te autentificas no podras realizar ninguna de las funciones"
//falla
//header("Location: index.html"); 

?>
y login_admin.php que es este..
Código PHP:
<?php 
/*Guardar datos Administrador */
$loginCorrecto false

$nickUsuarioL
$emailUsuarioL
$nombreUsuarioL
/*Copmprobaciono cookies" : */

if(isset($HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"])) 


session_start(); 
$_SESSION["autentificado"]= "SI"

 


/*resultado de nick y pass guardado por las cookies */

$result mysql_query("SELECT * FROM Admin WHERE login='".$HTTP_COOKIE_VARS["usNick"]."' AND pass='".$HTTP_COOKIE_VARS["usPass"]."'"); 



if(
$row mysql_fetch_array($result)) 


/*si los datos son correctos se actualizan las cookiees caducan a los 90 dias*/ 
 
setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000); 
setcookie("usPass",$HTTP_COOKIE_VARS["usPass"],time()+7776000); 
$loginCorrecto true

$nickUsuarioL $row["login"];  
$emailUsuarioL $row["mail"]; 
}

else 

//Destruimos las cookies.
setcookie("usNick","x",time()-3600); 
setcookie("usPass","x",time()-3600); 

mysql_free_result($result); 


?>
Pues eso es todo, no se si sera muy enrevesadoy fijo que se puede simplificar y algo hago mal al establecer las cookies, seguro que se puede hacer mas sencillo, espero que hayais entendido la idea de lo que quiero para poder ayudarme, Gracias y perdonad por el tocho pero aqui esta todo
  #14 (permalink)  
Antiguo 15/12/2006, 10:38
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

Si me permitís el atrevimiento, te propongo algunas modificaciones:

Primer archivo:
Código PHP:
//90 dias dura la cookie  
/*Ahora suponiendo que el password es correcto continuamos y lo proximo a hacer es establecer las  
cookies de nick y password (Las cuales nombramos "usNick"/"usPass" y contienen el nick y password 
respectivamente) en la maquina del usuario, informamos que se ha realizado correctamente el login 
y lo enviamos a la pagina principal 
*/ 
session_start()
$_SESSION['usNick'] = $nickN;
$_SESSION['usPass'] = $passN;
ob_end_flush(); 
header('Location: panel_admin.php');
}  
else  
{  
header('Location: "error.php");
}  
}  
else 
    { 
header('
Location"error.php");
    } 
mysql_free_result($result);  
}  
else  
{  
header(Location"error.php");
}  
mysql_close();  
?> 
En el segundo:
Código PHP:
$result mysql_query("SELECT * FROM Admin WHERE login='".$_SESSION["usNick"]."' AND pass='".$_SESSION["usPass"]."'"); 
y en login_admin:
Código PHP:
<?php  
/*Guardar datos Administrador */ 
$loginCorrecto false;  

$nickUsuarioL;  
$emailUsuarioL;  
$nombreUsuarioL;  
/*Copmprobaciono cookies" : */ 

session_start();
if(isset(
$_SESSION["usNick"]) && isset($_SESSION["usPass"]))  
{
$_SESSION["autentificado"]= "SI";   


/*resultado de nick y pass guardado por las cookies */ 

$result mysql_query("SELECT * FROM Admin WHERE login='".$_SESSION["usNick"]."' AND pass='".$_SESSION["usPass"]."'");  



if(
$row mysql_fetch_array($result) && (time() < $_SESSION['caduca']) )  
{  

/*si los datos son correctos se actualizan las cookiees caducan a los 90 dias*/  

$_SESSION['caduca'] = time()+7776000;
$loginCorrecto true;  

$nickUsuarioL $row["login"];   
$emailUsuarioL $row["mail"];  


else  
{  

//Destruimos las cookies. 
$_SESSION = array();
session_destroy();
}  
mysql_free_result($result);  

}  
?>
Aún puede mejorarse, pero más que nada te quiero mostrar cómo funcionan las sesiones.
Sigo sin ver en dónde estás empezando la salida (y cuál es el motivo del error con las cookies). ¿podrías poner el mensaje completo? el error mismo indica dónde comienza la salida del programa...


Saludos.
  #15 (permalink)  
Antiguo 15/12/2006, 11:15
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

vale ahora lo pruebo y te pasteo el error, gracias avlin eres un fiera!!!
  #16 (permalink)  
Antiguo 15/12/2006, 11:18
Avatar de elquique  
Fecha de Ingreso: marzo-2004
Ubicación: Florida, Uruguay
Mensajes: 2.495
Antigüedad: 20 años, 1 mes
Puntos: 78
Re: otra opción a las sesiones

Cita:
Iniciado por Javiglez Ver Mensaje
... avlin eres un fiera!!!
ufa tras que te ayuda te ries de su cara :) jaja
__________________
Blog Jorge Oyhenard | Tutoriales Photoshop
  #17 (permalink)  
Antiguo 15/12/2006, 11:39
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

jeje, avlin ahora me da 3 warnings en ingresar admin que son estos

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php:8) in /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php on line 46

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php:8) in /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php on line 46

Warning: Cannot modify header information - headers already sent by (output started at /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php:8) in /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php on line 50

Dos del session start y otro del primer header....Es desesperante lo de las sesiones....
  #18 (permalink)  
Antiguo 15/12/2006, 12:02
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

Jaja, no te preocupes que con quique arreglamo' afuera (del foro claro ajajaj)

Y por los errores, no te asustes, todos son causados por lo mismo: la línea 46 de ingresar_admin.php

Fijate en eso.
  #19 (permalink)  
Antiguo 15/12/2006, 12:26
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

ya ya es en el inicio de sesion session start pero no se como arreglarlo... ;(
  #20 (permalink)  
Antiguo 15/12/2006, 12:35
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

me equivoqué, no era en la 46 sino en la 8:
output started at /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php:8

'salida comenzada en /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php:8'
  #21 (permalink)  
Antiguo 15/12/2006, 12:42
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Pues en la 8 esta donde empieza el codigo phpn no he dejado ningun espacio en blanco encima ni nada no se que puede lanzar a la cabecera...
<body>
<?php
ob_start();
include("../conectarse_bd.php");
quiza ahora el ob_start(); no le necesito...
  #22 (permalink)  
Antiguo 15/12/2006, 12:47
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

tenés el <body> antes....

Nada, absolutamente NADA de texto puede enviarse, no se trata de que <?php esté al comienzo de la línea, ni de que no tenga líneas en blanco, se trata de que <?php sea lo primero que hay en el archivo...

Ahí está el problema.


Saludos.
  #23 (permalink)  
Antiguo 15/12/2006, 12:58
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Bien si quite todo y en ingresar_admin solo hay code php y al ejecutarlo me da este warning del header location y volvemos a las andadas....
Warning: Cannot modify header information - headers already sent by (output started at /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php:42) in /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php on line 43
El ingresar_entero...
Código PHP:
<?php 
ob_start
();
include(
"../conectarse_bd.php"); 
//$link=Conectarse(); 
function quitar($mensaje

$mensaje str_replace("<","&lt;",$mensaje); 
$mensaje str_replace(">","&gt;",$mensaje); 
$mensaje str_replace("\'","'",$mensaje); 
$mensaje str_replace('\"',"&quot;",$mensaje); 
$mensaje str_replace("\\\\","&#92",$mensaje); 
return 
$mensaje

if(
trim($HTTP_POST_VARS["login"]) != "" && trim($HTTP_POST_VARS["pass"]) != ""

/*Asi que continuamos suponiendo que todo este bien, ahora lo que hacemos es quitarle el html, 
apostrofe comillas y demas al nick y password enviados por el usuario para su comprobacion 
con la base de datos, para ello utilizamos la funcion quitar($mensaje) que explicamos antes, 
y guardamos las nuevas cadenas en dos nuevas variables:*/ 
$nickN quitar($HTTP_POST_VARS["login"]); 
$passN quitar($HTTP_POST_VARS["pass"]); 
/*Ahora ejecutamos una instruccion sql, en la cual le pedimos a la base de da
tos que de la tabla usuarios nos devuelva la fila cuyo nick corresponda por 
el enviado por el usuario: */
$result mysql_query("SELECT pass FROM Admin WHERE login='$nickN'"); 
if(
$row mysql_fetch_array($result)) 

/*Ahora continuamos con el proceso suponiendo que el usuario exista en la base de datos ahora 
debemos comprobar que el password sea correcto, para ello hacemos una simple comparacion, si 
es correcto continuamos de lo contrario mostramos el mensaje de password incorrecto: */
if($row["pass"] == $passN

//90 dias dura la cookie 
/*Ahora suponiendo que el password es correcto continuamos y lo proximo a hacer es establecer las 
cookies de nick y password (Las cuales nombramos "usNick"/"usPass" y contienen el nick y password
respectivamente) en la maquina del usuario, informamos que se ha realizado correctamente el login
y lo enviamos a la pagina principal
*/
session_start(); 
$_SESSION['usNick'] = $nickN
$_SESSION['usPass'] = $passN
ob_end_flush();  
header('Location: panel_admin.php'); 
}   
else   
{   
header('Location: error.php'); 
}   
}   
else  
    {  
header('Location: error.php'); 
    }  
mysql_free_result($result);   
}   
else   
{   
header('Location: error.php'); 
}   
mysql_close();   
?>
  #24 (permalink)  
Antiguo 15/12/2006, 13:07
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

ob_end_flush();

Esa línea manda todo lo generado al navegador...
Si no vas a generar nada de texto para el navegador, no uses ob_start ni ob_end_flush, ya que de nada te sirve. Si ese es el archivo completo, podés eliminar tanto ob_start() como ob_end_flush(), no habrá diferencia de funcionamiento. Y solucionarás el problema de las cabeceras.


Saludos
  #25 (permalink)  
Antiguo 15/12/2006, 13:53
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Muy amable avlin muchas gracias, seguire con ello que veo que estas abanzando y te seguire preguntando dudillas si no lo consigo por este hilo sino te importa seguir echandome una mano, Gracias un saludo
  #26 (permalink)  
Antiguo 15/12/2006, 18:28
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Puff no es por ser pesado, vamos quitando fallos pero siguen saliendo otros, quite los enf_flush etc...y nada que al meter el usuario por defecto da estos 3 warnings...

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /web/sites/user/6/72/54406/public/www/conectarse_bd.php:22) in /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php on line 38

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /web/sites/user/6/72/54406/public/www/conectarse_bd.php:22) in /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /web/sites/user/6/72/54406/public/www/conectarse_bd.php:22) in /web/sites/user/6/72/54406/public/www/admin/ingresar_admin.php on line 41

q calvario...
  #27 (permalink)  
Antiguo 15/12/2006, 18:31
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

No te desanimes, la depuración siempre lleva tiempo.
Fijate que cada error te dice dónde está el problema o lo que tenés que arreglar: estos te dicen qe la salida empieza en conectarse_bd.php en la línea 22.

Siempre es una buena costumbre separar los cálculos y los procesamientos de datos de lo que luego se va a mostrar, ya que de esa forma te evitás esta clase de errores.

Vamos que va quedando menos


Saludos.
  #28 (permalink)  
Antiguo 16/12/2006, 03:52
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Gracias por tu paciencia y consejos jeje, este es el conectarse_bd.php
Código PHP:
<?php
//Funcion que se conecta a la base de datos
function Conectarse()
{
    if (!(
$link=mysql_connect("server""base""pass")))
    {
        echo 
"Error conectando a la base de datos.";
        exit();
    }
    if (!
mysql_select_db("base",$link))
    {
        echo 
"Error de  la base de datos.";
        exit();
    }
    return 
$link;
}

$link=Conectarse();
//mysql_close($link); //cierra la conexion
?>
Puede ser por los echos que saco? de todas formas no se si esto esta bien...

Última edición por Javiglez; 16/12/2006 a las 04:07
  #29 (permalink)  
Antiguo 16/12/2006, 05:03
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Por esas salidas por pantalla no es porque sigue dando los mismos errores aunque no esten...:(
  #30 (permalink)  
Antiguo 16/12/2006, 08:59
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: otra opción a las sesiones

¿hay líneas en blanco antes o después del código PHP (mejor dicho, antes de la apertura <?php y/o después del cierre ?>)?

Un archivo incluido está en 'modo texto' por decirlo de alguna forma, cualquier cosa que no esté dentro de un bloque php será enviada como texto.

Verificá que <?php sea lo primero en el archivo y que ?> sea lo último (sin líneas en blanco o espacios después)


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 09:56.