Foros del Web » Programando para Internet » PHP »

Problemas con las sesiones en PHP

Estas en el tema de Problemas con las sesiones en PHP en el foro de PHP en Foros del Web. Hola, tengo el siguiente problema. Tengo 2 archivos php, authen.php e index.php. En el primero, intento hacer un login, y cuando el usuario se ha ...
  #1 (permalink)  
Antiguo 20/04/2004, 11:43
 
Fecha de Ingreso: abril-2004
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Problemas con las sesiones en PHP

Hola, tengo el siguiente problema. Tengo 2 archivos php, authen.php e index.php. En el primero, intento hacer un login, y cuando el usuario se ha logado correctamente, lo redirecciono al index. Aqui viene el problema, que no me reconoce la variable de sesion $_SESSION['logado'] que he definido en authen.php

track_vars y register_globals estan activados (register_globals lo necesito tener activado). para que mas informacion os pongo el codigo que tengo al inicio de los 2 archivos:

AUTHEN.PHP:
**************************************************
<?php
if(!session_id()){
session_start();
}
if (file_exists('includes/configure.php')) include('includes/configure.php');
if (file_exists('configure.php')) include('configure.php');

if (isset($submit))
{
if ((ADMIN_USERNAME == $usuario) && (ADMIN_PASSWORD == $contrasenna))
{
$_SESSION['logado']=true;
if (file_exists('index.php')){
header("Location: index.php?PHPSESSID=" . session_id());
}
else{
header("Location: ../index.php?PHPSESSID=" . session_id());
}
exit;
}
else
$_SESSION['logado']=false;
}
**************************************************

y en index.php:
**************************************************
if ((!isset($_SESSION['logado'])) || ($_SESSION['logado']!=1))
{


if (file_exists('authen.php'))
{
header("Location: authen.php");
}
else{
header("Location: includes/authen.php");
}

}
else{ (aqui se cargaria la pagina si estuviese logado) }
********************************************
gracias de antemano
  #2 (permalink)  
Antiguo 20/04/2004, 14:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Siempre que accedas a una variable de sesión tanto para leer su valor como para definirlo y/o usar alguna función referente a sesionse (salvo excepciones que se hace antes de...) se ha de usar la función:

Código PHP:
<?
session_start
();
//y luego tus accesos a tus variabels de sesión:
if ((!isset($_SESSION['logado'])) || ($_SESSION['logado']!=1)) 
// etc...
(En teoría con el isset() te sobra para validar la existencia de tu variable tipo "flag/bandera/estado" => "logado". Si existe es que la creastes .. esa es la virtud de los arrays superglobales. Para ese caso y como lo aplicas .. el valor de dicha variable importa poco cara a la validación. En tal caso guardate por ejemploa ahí el nombre de ese usuario que accede al sistema y le muestras un mensajito tipo "Usuario: ".$_SESSION['logado'] ...

También Fijate que...

Código PHP:
if(!session_id()){
session_start(); 
El session_id() en teoría no toma el valor de la sesión en curso hasta que no se hace un session_start() que inicia o continua con la sesión que venga propagado a dicho escript el SID .. sea por el URL (como parece que lo quieres hacer) o venga en una cookie (otra opción y más segura de propagar el SID).

Otro detalle ..

El SID se compone del nombre de la sesión y el ID de la sesión. El nombre de la sesión puede ser variable dependiendo de que si definistes un nombre de sesión con: sesson_name() o de la configuración de PHP (php.ini). Por defecto tiene el nombre de sesión que usas: PHPSESSID pero como te comento puede variar .. así que es altamente recomendable que uses el SID como constante o bien lo compongas a mano con la función session_name() + session_id()

Ejemplo:
Código PHP:
header("Location: index.php?" SID); 
ó
Código PHP:
header("Location: index.php?" session_name()."=".session_id()); 
Y .. cuando redireccionas por Header() de "Location" (cabecera HTTP) .. le indicas al navegador que cambie de página pero el flujo del código PHP sigue ejecutandose hasta el final. Dependiendo de los condicionales que uses y en general del flujo del mismo podrás experimentar problemas vários .. Por ende, es recomendable parar la ejecución del script cuando hagas un "header("Location ....")" ya que en teoría ahí mismo deseas que se pare la ejecución de ese script y se llame a otro.

ejemplo:
Código PHP:
header ("Location: tal.php");
exit; 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 20/04/2004 a las 14:32
  #3 (permalink)  
Antiguo 21/04/2004, 02:23
 
Fecha de Ingreso: abril-2004
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Muchas gracias por la ayuda. Llevaba 2 dias de trabajo sin poder avanzar por este maldito problema. Muchisimas 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 19:29.