Foros del Web » Programando para Internet » PHP »

problema extraño con sesiones

Estas en el tema de problema extraño con sesiones en el foro de PHP en Foros del Web. Hola, tengo un problema con sesiones, pasa que cree un scriipt que autentifica un usuario (lo clásico), y la aplicación funciona bien en el servidor, ...
  #1 (permalink)  
Antiguo 16/09/2004, 13:34
 
Fecha de Ingreso: septiembre-2003
Mensajes: 241
Antigüedad: 14 años, 2 meses
Puntos: 0
problema extraño con sesiones

Hola, tengo un problema con sesiones, pasa que cree un scriipt que autentifica un usuario (lo clásico), y la aplicación funciona bien en el servidor, pero cuando quiero ejecutarla localmente no funciona, sale el error:Warning: Cannot add header information - headers already sent by (output started at C:\Xitami\webpages\web_impuestos\virtualgraco\inde x_s.php:3) in C:\Xitami\webpages\web_impuestos\virtualgraco\inde x_s.php on line 24

pero respito lo extraño es que en el servidor funciona bien
el codigo es el siguiente:
<?php
$cnx = odbc_connect("archivo","","");
$sql = "SELECT * FROM gracos WHERE ruc LIKE '$_POST[ruc]'";
$sql1 = odbc_exec($cnx,$sql);
if (odbc_fetch_row($sql1)){
session_start();
$_SESSION["ruc"] = odbc_result($sql1,'ruc');
$_SESSION["nombre"] = odbc_result($sql1,'nombre');
if (odbc_result($sql1,'ciudad') == "ciudad1"){
$_SESSION["graco"] = "1";
}
if (odbc_result($sql1,'ciudad') == "Ciudad 2"){
$_SESSION["graco"] = "2";
}
$_SESSION["sw"] = "1";
header("Location: noticias.php");
} else {
header("Location: index.php?usuario=NO");
}
odbc_free_result($sql1);
odbc_close($cnx);
?>

porfavro ayudenme por que es muuuy incomodo estar subiendo cualquier cambio al servidor para ver si funciona en vez de trabajarlo priemro localmente en mi PC. gracias anticipadas
  #2 (permalink)  
Antiguo 17/09/2004, 01:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El error:
(output started at C:\Xitami\webpages\web_impuestos\virtualgraco\inde x_s.php:3)

te dice que en esa línea de tu código hay salida hacia al navegador (cliente) ya sea un simple espacio, un sálto de línea o un echo "algo" .. o HTML/javascript directo antes del primer <? que tengas.

Un saludo,

PD: consejo ... usa Apache como servidor HTTP en lugar de Xitami va mejor para PHP así lo ejecutarías como "módulo" con mejor rendimiento y más opciones.
  #3 (permalink)  
Antiguo 17/09/2004, 08:22
 
Fecha de Ingreso: septiembre-2003
Mensajes: 241
Antigüedad: 14 años, 2 meses
Puntos: 0
no se que hacer

Primero agradecerte por tomarte un tiempo para escribirme, gracias de verdad.

te cuento que verifique caracter a caracter el codigo que te envíe y no existe error alguno, como te comente lo extraño es que funciona bien en el servidor y NO en mi equipo de manera local, se me ocurrio actualizar la version de PHP a la misma version que existe en el servidor que es la 4.3.4, ahora ya no sale el error...en el browser se muestra como si no existiera la página, me parece que los Header no estan funcionando, tambien verifique espacios o salidas antes de usar esta oopcion y todo esta bien.

mira uso basicamente la siguiente estructura:
index.php; que contiene un formulario con un campo de entrada para validarlo
index_s.php; el dato enviado se captura aqui y se verifica que este OK, si esta bien se crea la sesión, una variable SW = 1 y se redirecciona a la página llamada noticias.php si el dato no corresponde no se crea nada y se redirecciona al mismo index.php.
seguridad.php; esta página crea o abre la sesion y verifica si el SW es 1 para proceder sino se redirecciona al index.php.
el la página noticias.php incluyo un include("seguridad.php");

disculpa si molesto tus actividades, pero eres el único que me esta colaborando, espero tus comentarios
gracias nuevamente
Rafael Laguna Ulloa
La Paz -- Bolivia
  #4 (permalink)  
Antiguo 17/09/2004, 08:41
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

¿Cual es el codigo que hay el la linea 3? Porque tu session_start() esta en la 4 linea del codigo que has puesto.

Hay configuraciones de PHP o del servidor web que pueden hacer que funcione tu codigo en un servidor si y en otro no. Por ejemplo, puedes tener en el php configurado para que este activo el buffer de salida por defecto. O ser el mismo servidor web el que tiene ese buffer activado.

Por eso es lo mejor que el session_start() sea la primera linea de todo el fichero.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 17/09/2004, 08:52
 
Fecha de Ingreso: septiembre-2003
Mensajes: 241
Antigüedad: 14 años, 2 meses
Puntos: 0
este es el codigo

Gracias Nuevamente, adjunto el codigo, tal cual lo tengo:
archivo index.php
solo tiene un formulario con un campo, este dato se envia a index_s.php

archivo: index_s.php

<?php
$cnx = odbc_connect("noticias","","");
$sql = "SELECT * FROM gracos WHERE ruc LIKE '$_POST[ruc]'";
$sql1 = odbc_exec($cnx,$sql);
if (odbc_fetch_row($sql1)){
session_start();
$_SESSION["ruc"] = odbc_result($sql1,'ruc');
$_SESSION["nombre"] = odbc_result($sql1,'nombre');
if (odbc_result($sql1,'ciudad') == "La Paz"){
$_SESSION["graco"] = "1";
}
if (odbc_result($sql1,'ciudad') == "Cochabamba"){
$_SESSION["graco"] = "2";
}
if (odbc_result($sql1,'ciudad') == "Santa Cruz"){
$_SESSION["graco"] = "3";
}
$_SESSION["sw"] = "1";
Header("Location: noticias.php");
//echo "hola";
//echo $_SESSION["ruc"], session_id();
} else {
Header("Location: index.php?usuario=NO");
//echo "adios";
}
odbc_free_result($sql1);
odbc_close($cnx);
?>

******************************
archivo: seguridad.php

<?php
session_start();
if ($_SESSION["sw"] != "1")
{
header ("Location: index.php");
exit();
}
?>

***********************
archivo: noticias.php

<?php
//include("seguridad.php");
session_start();
if ($_SESSION["graco"] == "1") {$ciudad = "LA PAZ";}
if ($_SESSION["graco"] == "2") {$ciudad = "COCHABAMBA";}
if ($_SESSION["graco"] == "3") {$ciudad = "SANTA CRUZ";}
?>
y despues va el codigo html

************************
los otros archivos (todos *.php)

<?php
include("seguridad.php");
?>
resto del codigo html o php

gracias por tomarse el tiempo de revisar el codigo
Rafael
  #6 (permalink)  
Antiguo 17/09/2004, 15:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. el código parecer estar bien. Es cierto todo lo que comenta Josemi.

Si ahora no obtienes ese mensaje de error .. en principio no se debe a la "versión" nueva . .sino a diferente configuración (tal vez tenías activado el control del buffer .. o alguna directiva como auto_prepend_file que inserta un archivo automáticamente antes de cualquier cosa que tu programación genere como salida ... ).

Cita:
ahora ya no sale el error...en el browser se muestra como si no existiera la página
Que es eso exactamente? .. un error de "página no encontrada"? (404) ...

Como recomendación .. Usa un exit; despues de cada header() de "Location" .. para terminar ahí la ejecución de tu script (y si requieres de cerrar tu BD .. etc hazlo antes del exit;)

Tambien decías usar Xitami como servidor HTTP .. podrías probar Apache .. Por ejemplo en IIS suele dar problemas la cabecera HTTP "Location" ...

Un saludo,
  #7 (permalink)  
Antiguo 22/09/2004, 13:05
 
Fecha de Ingreso: septiembre-2003
Mensajes: 241
Antigüedad: 14 años, 2 meses
Puntos: 0
hola, bueno la verdad es que me rindo sobre eso, almenos todo funciona bien en el servidor, sin embargo ahora tengo otro problema que tiene que ver con el include, como hago para establecer un include que esta fuera de la carpeta donde ejecuto el script, es decir cuando todo esta en la misma carpeta pongo:
<?php
include("archivo.php");
?>
pero si el archivo se ejecuta en una subcarpeta como debo poner el inlcude???
include("../archivo.php"); ???
  #8 (permalink)  
Antiguo 23/09/2004, 02:20
 
Fecha de Ingreso: junio-2004
Mensajes: 266
Antigüedad: 13 años, 5 meses
Puntos: 8
si, pon la ruta relativa al documento actual. Esto se usa mucho para tener cada script en su sitio y no todo en el mismo directorio y por seguridad, podrías mantener el script con los datos de conexion a la base de datos fuera de lo que es el servidor web y usarlo cuando sea necesario.
__________________
WebSenior
  #9 (permalink)  
Antiguo 27/09/2004, 09:56
 
Fecha de Ingreso: septiembre-2003
Mensajes: 241
Antigüedad: 14 años, 2 meses
Puntos: 0
Una pregunta, porqué la primera vez que inicio una sesion (ingresando una clave) ingresa a la página correspondiente pero no se inicia la sesion, y recien a la segunda oportunidad si aparecen los datos del usuario identificado???
  #10 (permalink)  
Antiguo 29/09/2004, 09:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Las cookies y sesiones quedan disponibles (las variables y sus valores asociados) en la próxima petición al servidor .. Es decri .. del script que le das valor/creas esa sessión (aplicable a cookies también) sólo puedes obtener su valor en la siguiente página que redirecciones (sea si misma recargandola, u otra vía link)

Un saludo,
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 15:25.