Foros del Web » Programando para Internet » PHP »

Ayuda con las Sesiones en PHP

Estas en el tema de Ayuda con las Sesiones en PHP en el foro de PHP en Foros del Web. hola que tal de nuevo yo aqui molestandolos Again jejeje, bueno les comento que que reinstale el appserv estaba utilizando el appserv-win32-2.3.0 ahora lo cambie ...
  #1 (permalink)  
Antiguo 21/09/2008, 21:05
 
Fecha de Ingreso: septiembre-2008
Mensajes: 19
Antigüedad: 16 años, 2 meses
Puntos: 0
Ayuda con las Sesiones en PHP

hola que tal de nuevo yo aqui molestandolos Again jejeje, bueno les comento que que reinstale el appserv estaba utilizando el appserv-win32-2.3.0 ahora lo cambie x appserv-win32-2.5.9 pero ahora me marca error en las sesiones y me marca el siguiente error
Código PHP:
Warningsession_start() [function.session-start]: Cannot send session cookie headers already sent by (output started at C:AppServwwwatesaprincipallogin.php:1in C:AppServwwwatesaprincipalconfig.php on line 21 
que seria la siguiente linea
Código PHP:
session_start(); 
He leido otros temas donde comentan que hay que configurar el archivo php.ini pero la verdad nunca lo he usado me podrian ayudar x favor x que si no ahora si me voy a volver jejej gracias por su ayuda
  #2 (permalink)  
Antiguo 21/09/2008, 21:07
 
Fecha de Ingreso: diciembre-2007
Ubicación: C:\Escritorio\Frente al Pc
Mensajes: 47
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Ayuda con las Sesiones en PHP

un php info a ver si tienes ls sesiones activas :P
  #3 (permalink)  
Antiguo 21/09/2008, 21:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 19
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda con las Sesiones en PHP

hola lathix ya abri el archivo php info pero donde veo si las tengo activas??
  #4 (permalink)  
Antiguo 21/09/2008, 21:19
 
Fecha de Ingreso: diciembre-2007
Ubicación: C:\Escritorio\Frente al Pc
Mensajes: 47
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Ayuda con las Sesiones en PHP

naaa te dije que aplicaras la funcion phpinfo() en too caso revisa en el fichero php.ini la ruta de session.save_path e indicale una carpeta donde las guarde las sesiones, si tiene algo comprueba que este dicha carpeta sino crea una :P
  #5 (permalink)  
Antiguo 21/09/2008, 21:20
 
Fecha de Ingreso: diciembre-2007
Ubicación: C:\Escritorio\Frente al Pc
Mensajes: 47
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Ayuda con las Sesiones en PHP

aunque leyendoo bien tu error parece estar en el fichero config.php
  #6 (permalink)  
Antiguo 21/09/2008, 22:04
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Ayuda con las Sesiones en PHP

No imprimas anda antes de el session_start()
Tambien revisa que no aiga espacios en blanco antes de las etiquetas de apertura (<?php).
  #7 (permalink)  
Antiguo 22/09/2008, 08:29
 
Fecha de Ingreso: septiembre-2008
Mensajes: 19
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Respuesta: Ayuda con las Sesiones en PHP

teng estos 4 archivos donde creo que puede estar el error pues algunos de ellos se manda a llamar entre ellos
un archivo es el config.php

Código PHP:
<?php 
session_start
(); 
function 
Conectarse() 
{ if (!(
$link=mysql_connect("localhost","root","atesa"))) 
   { echo 
"Error conectando a la base de datos."
      exit(); } 
   if (!
mysql_select_db("okok9687",$link)) 
   { echo 
"Error seleccionando la base de datos."
      exit();  } 
   return 
$link

$link=Conectarse(); 
mysql_close($link); //cierra la conexion ?>
otro autentificar.php
Código PHP:
<?php include('config.php'); 
$link=Conectarse();
//comprobamos en la db si existe ese nick con esa pass
   
$usuarios=mysql_query("SELECT * FROM users WHERE nick='$_POST[nick]' and pass='$_POST[pass]' ",$link);
   if(
$user_ok mysql_fetch_array($usuarios)) //si existe comenzamos con la sesion, si no, al index
   
{
        
session_register("usuario"); //registramos la variable usuario que contendrá el nick del user
        
session_register("level"); //registramos la variable level que contendrá el level del user
        //damos valores a las variables de la sesión
        
$_SESSION[usuario] = $user_ok["nick"]; //damos el nick a la variable usuario
        
$_SESSION[level] = $user_ok["level"]; //damos el level del user a la variable level
        
$_SESSION[cliente] = $user_ok["cliente"];
        
$_SESSION[id] = $user_ok["id"];
       
header("Location:login.php"); //volvemos al login donde nos saldrá nuestro menú de usuario
    

    else
    {
      echo 
'Nick y pass incorrectos'
     } 
?>
, login.php,
Código PHP:
<?php include("config.php"); 
  
$link=Conectarse(); 
if(!isset(
$_SESSION[usuario]) ) //comprobamos que no existe la session, es decir, que no se ha logeado, y mostramos el form
{
?>
<style type="text/css">
<!--
body {
    background-image: url(rollo.JPG);
}
.Estilo1 {font-family: Tahoma}
.Estilo2 {
    font-size: 12px;
    font-style: italic;
}
.Estilo3 {color: #F6F1ED}
-->
</style>
<form action="autentificar.php" method="POST">

<p align="center">Bienvenidos al Apartado de Consulta de Saldos si ya eres usuario</p>
<p align="center">escribe tu usuario y password.  </p>
<p align="center"><strong>Iniciar sesi&oacute;n</strong></p>
<TABLE width="373" align="center" bordercolor="../principal/rollo.JPG" bordercolorlight="#E67A1A" bordercolordark="#E67A1A" background="#E67A1A"> 
<TR> 
    <TD class="Estilo11 Estilo1"> <img src="gente.gif" width="22" height="23">Usuario:     </td>      
    <TD class="Estilo4"><input type="text" name="nick" size="30"></TD> 
</TR> 
<TR> 
    <TD class="Estilo11 Estilo1"> <img src="llave.gif" width="21" height="21">Password: </td>
     <TD class="Estilo4"><input type="password" name="pass" size="30" ></td>
</tr>
<tr>
     
<TD class="Estilo11 Estilo1"> </td> 
 <TD class="Estilo4"><input type="submit" name="submit" value="Enviar"></td>
</tr>

</table>
<p align="center" class="Estilo2"><a href="php/insertarregistro.php">Nuevo..? Registrate</a> <span class="Estilo3">.............</span><a href="pass.php">Olvidaste tu Contrase&ntilde;a</a> </p>
</form>
<?
}
else
{
echo 
'Bienvenido '.$_SESSION[usuario]; //ej Bienvenido Juan
echo '<br>Tu level es '.$_SESSION[level]; //mostramos el level del user
if($_SESSION[level] == 2
{
echo 
'<br><a href=detalles.php>Detalles</a>';
echo 
'<br><a href=datos.php>Cambio de Datos</a>';
}
if(
$_SESSION[level] == 1
{
//mostramos el link para ir a la pagina privada porque el user tiene level 1 (*Nota: el level por defecto es 2, por lo tanto no se le mostrará)
//*Nota2: para cambiar el level a 1, se tiene k hacer manualmente por phpmyadmin
echo '<br><a href=perfil.php>Ir a pagina privada</a>';
 
}
echo 
'<br><a href=logout.php>Salir</a>'//link para deslogearse, iría a logout.php
}
?>
y logout.php
Código PHP:
<?php session_start();
session_destroy(); //destruimos la sesion
include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db y la sesión
header("Location:login.php"); //volvemos al login.php
?>

cada uno de ellos me marca los siguientes errores

cuando quiero iniciar sesion doy clic en el menu de clientes (se abre el archivo de login que primero verifica si no hay ya un usuario logeado o sea que no haya cerrado sesion si no hay ninguno logeado te pide usuario y contraseña, ok)
bueno las escribo y doy clic en el boton enviar q este boton manda a llamar el archivo autentificar, y me marca el siguiente error:

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\atesa\principal\config.php:13) in C:\AppServ\www\atesa\principal\autentificar.php on line 14

que la linea 13 del archivo config.php es la siguiente

mysql_close($link); //cierra la conexion ?>

y la linea 14 de autentificar.php es la siguiente

header("Location:login.php");

pero bueno, aun asi le vuelvo a dar clic en el menu clientes (te acuerdas que te lo mencione arriba???) bueno al darle clic en clientes, me muestra la pagina que quiero como si hubiera entrado normal me explico!!!??

ok puedo hacer las operaciones que quiero
pero al darle clic en salir que este me lleva al archvio de logout.php me marca este error

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\atesa\principal\config.php:13) in C:\AppServ\www\atesa\principal\logout.php on line 4

que la linea 13 del archivo config.php es la siguiente y es igual al error anterior

mysql_close($link); //cierra la conexion ?>

mientras que la linea 4 de logout.php es la siguiente

header("Location:login.php"); //volvemos al login.php

si te fijas en los dos errores me marca lo mismo en el header??? que sera??? me podrias ayudar?? gracias.
  #8 (permalink)  
Antiguo 22/09/2008, 08:44
 
Fecha de Ingreso: diciembre-2007
Ubicación: C:\Escritorio\Frente al Pc
Mensajes: 47
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Ayuda con las Sesiones en PHP

debes comprobar si la sesion esta activa primero con el siguiente codigo...

<?
session_start();
if(isset($SESSION)){
header("location: index.php"); /* Si ha iniciado la sesion, vamos a index.php */
} else {
/* Cerramos la parte de codigo PHP porque vamos a escribir bastante HTML y nos será mas cómodo así que metiendo echo's */
?>

eso lo debes poner en cada pagina donde quieras verificar la sesion...en elm login simplemente debes contactar con la base de datos para extraer los datos, despues se mantendran en la sesion hasta que destruyas las variables en el logout.php

aka te dejo un link que postie anteriormente
  #9 (permalink)  
Antiguo 22/09/2008, 08:49
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Ayuda con las Sesiones en PHP

Hola lathix...

Dos cosas:

1. Pueba esto:

Código PHP:
<?php
include('config.php');
.
.
.
2. A manera de consejo, la instrucción "session_register() ya no se usa, basta con lo que hiciste con $_SESSION.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #10 (permalink)  
Antiguo 22/09/2008, 09:08
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 17 años, 5 meses
Puntos: 49
Respuesta: Ayuda con las Sesiones en PHP

Que tal akkaslla, como ya te indicaron el problema radica en que antes del session_start() no puedes mandar ninguna salida al navegador, ahora tienes algunos errores de conceptos en los scripts que publicas

1. En el archivo config.php no es necesario que apliques el session_start() , no cierres la conexión deja la función como tal puede ser así:
Código PHP:
<?php  
function Conectarse()  
{ if (!(
$link=mysql_connect("localhost","root","atesa")))  
   { echo 
"Error conectando a la base de datos.";  
      exit(); }  
   if (!
mysql_select_db("okok9687",$link))  
   { echo 
"Error seleccionando la base de datos.";  
      exit();  }  
   return 
$link;  
?>
2. El archivo autentificar.php modifícalo de esta forma, no es necesario que utilizes el session_register()
Código PHP:
<?php include('config.php');  
$link=Conectarse(); 
//comprobamos en la db si existe ese nick con esa pass 
   
$usuarios mysql_query("SELECT * FROM users WHERE nick='$_POST[nick]' and pass='$_POST[pass]' ",$link) or die("Error en query:" .mysql_error() ); 
$user_ok mysql_fetch_array($usuarios);
   if(
mysql_num_rows($usuarios) != 0)//si existe comenzamos con la sesion, si no, al index 
   

         
session_start();
        
//damos valores a las variables de la sesión 
        
$_SESSION['usuario'] = $user_ok["nick"]; //damos el nick a la variable usuario 
        
$_SESSION['level'] = $user_ok["level"]; //damos el level del user a la variable level 
        
$_SESSION['cliente'] = $user_ok["cliente"]; 
        
$_SESSION['id'] = $user_ok["id"]; 
       
header("Location:login.php"); //volvemos al login donde nos saldrá nuestro menú de usuario 
    
}  
    else 
    { 
      echo 
'Nick y pass incorrectos';  
     }  
?>
3. Lo mismo en login.php agregas el session_start() utiliza las variables de session de esta forma $_SESSION['variable'] utilizando las comillas para que le ahorres trabajo al PHP
Código PHP:
<?php include("config.php");  
  
$link=Conectarse();
session_start();  
if(!isset(
$_SESSION['usuario']) ) //comprobamos que no existe la session, es decir, que no se ha logeado, y mostramos el form 

?>
4. Y por ultimo el logout.php , la forma correcta de destruir la sesion es así, ademas no es necesario que incluyas el archivo de conexión a la BD, ademas si deseas destruir las variables asociadas a la sesion puedes utilizar session_unset(), o $_SESSION = array() puedes ver la referencia en el manual de PHP, session_destroy()
Código PHP:
<?php session_start(); 
$_SESSION = array(); // Destruye todas las variables de la sesión
session_destroy(); //destruimos la sesion
header("Location:login.php"); //volvemos al login.php 
?>

Saludos.

Última edición por Carlojas; 22/09/2008 a las 09:15
  #11 (permalink)  
Antiguo 23/09/2008, 08:15
 
Fecha de Ingreso: septiembre-2008
Mensajes: 19
Antigüedad: 16 años, 2 meses
Puntos: 0
Problema solucionado

MUCHAS GRACIAS YA QUEDO LO UNICO QUE MODIFIQUE FUE EN CADA INICIO DE PAGINA EMPIEZO CON EL CODIGO PHP Y YA ESTUVO GRACIAS
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 14:07.