Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/09/2005, 08:45
aLiSHa_FW
 
Fecha de Ingreso: agosto-2005
Mensajes: 76
Antigüedad: 18 años, 8 meses
Puntos: 0
Problema con sesiones... no consigo aclararme

Bueno, tras mucho leer y probar codigo sigo sin enterarme muy bien de como hacer funcionar las sesiones de php. Aqui os dejo lo que he probado y mi error por si alguien puede ayudarme. Muchas gracias.

Tengo un index con un iframe (donde se encuentra el formulario login). Tanto en el index como en la pagina login (donde el usuario se identifica e inicia la sesión), escribo esto antes de cualquier etiqueta html:

Código PHP:
<?php
//cambiar el limitador del cache a 'private'
session_cache_limiter('private');
//iniciamos sesion
session_set_cookie_params(1800);
session_start();
?>
Una vez rellenado el campo de usuario y password, el login se dirige al archivo de autorizacion.php:

Código PHP:
<?php
//cambiar el limitador del cache a 'private'
//session_cache_limiter('private');
//iniciamos sesion
session_set_cookie_params(1800);
session_start();
//header, funcion redirect
function redirect($url_relativa) {
    
header("Location: http://" $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/" $url_relativa);
    }
?>
<?php
define 
(DEBUG1); //modo de depuracion activado-desactivado
/*con esta funcion evitamos que puedan aparecer  mensajes de error personalizados en modo de depuracion desactivado*/
function stderr ($text){
    if (
DEBUG==1) {
        print 
"<br><font style='color: red'>";
        print 
$text;
        print 
"</font></br>";
    }
    return 
true;
    }
//obtenemos variables del formulario
if(empty($_POST['usuario']) AND empty($_POST['userpassword'])) {
    
stderr ("Please, enter a correct username and password");
    return 
false;
}
//declaramos variables de sesion si existen
elseif (isset($_POST['username']) AND  isset($_POST['userpassword'])) {
    
$_SESSION['username'] = $_POST['username'];
    
$_SESSION['userpassword'] = $_POST['userpassword'];
}
else { 
    
$url_relativa'identification.php';
    
redirect($url_relativa);
}    
//id sesion
$_SESSION['session_id'] = session_id();
//establecemos las constantes globales
$DB_HOST 'localhost'//para pruebas, 
//conectamos con la base de datos
if (! $conn mysql_connect ($DB_HOST$_SESSION['username'], $_SESSION['userpassword'])) { 
    
stderr ("Error connecting to database. Please, enter a valid username and userpassword");
    return 
false;
    }
    else { 
    
$url_relativa'main.html';
    
redirect($url_relativa);
}    

if (! 
mysql_close($conn)) {
    
stderr ("Error closing connection");
    return 
false;
}
?>
Aqui viene mi primera duda:

la sentencia session_cache_limiter('private'); debe ir exclusivamente en el index y en la primera pagina del iframe o debe ir en todas las paginas .html o .php de la herramienta? y debe ir en ese lugar o despues de session_start?

A continuación, el usuario identificado pasa a main.html (dentro del iframe), donde aparece el siguiente codigo al inicio del archivo:

Código PHP:
<?php
//cambiar el limitador del cache a 'private'
//session_cache_limiter('private');
//iniciamos sesion
//session_set_cookie_params(1800);
session_start();
//si no hay variables session, sesion finalizada e iniciar una nueva sesion
if (! isset($_SESSION['username']) AND isset($_SESSION['userpassword'])) {
    
$url_relativa'identification.php';
    
header("Location: http://" $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/" $url_relativa);
    exit;
}
else {
     echo 
"Welcome, ".$_SESSION['username'];
     echo 
"Your session ID is: ".$_SESSION['session_id'];
     }
?>
Aqui mis dudas son estas:
1- la sentencia //session_set_cookie_params(1800); debe ir en ese lugar? o puedo omitirla ya que esta en las anteriores paginas (index e identificacion)?
2- no aparece por pantalla:
echo "Welcome, ".$_SESSION['username'];
echo "Your session ID is: ".$_SESSION['session_id'];
Esto lo añado más adelante en una celda del html y tampoco aparece por pantalla.

Y por ultimo mi gran duda es la siguiente, una vez que el usuario se ha identificado y accedido a main.html, puede navegar por otras paginas dentro del iframe, hasta que llega a un formulario en el que se insertan datos en una base de datos de mysql. El problema es que con las sesiones quiero guardar el usuario y password para que al insertar datos en mysql no tenga que volver a identificarse. El error es el siguiente:

Código:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /usr/local/apache/htdocs/www/scripts/loadfile.php:4) in /usr/local/apache/htdocs/www/scripts/loadfile.php on line 7

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/www/scripts/loadfile.php:4) in /usr/local/apache/htdocs/www/scripts/loadfile.php on line 7

Warning: mysql_connect(): Access denied for user 'nobody'@'localhost' (using password: NO) in /usr/local/apache/htdocs/www/scripts/loadfile.php on line 28

Error connecting to database