Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/07/2013, 06:42
fcotorgi
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Pérdida de la sesión (I)

Hola, tengo un problema con el traspaso de la sesión al refrescar la página o cambarla y no sé por qué. Espero que alguien pueda ayudarme.

Parto de la página recepcion.php:

Esta página es encabezada por un inicio de sesión, la introducción de los archivos externos necesarios y la creación de la clase recepcion, hija de Web.
Concluye con la creación del código HTML por medio de las funciones de la clase
Web y de su hija recepcion.

La página resultante posee un menú superior realizado por Web y un submenú realizado por la función escribir_submenu_superior de recepcion. El submenú dispone de tres opciones: Iniciar/terminar sesión, recuperar la contraseña olvidada y registrarse. Nos interesa la primera.

Al hacer click en Iniciar sesión se escribe el formulario de escribir_columna_derecha_inicio_sesion(). La ejecución del formulario envía un post &accion='iniciar sesion' a la misma página. Este post es recogido al escribir el HTML de la página para que ejecute el método iniciar_sesion() el cual llamará a su vez al método iniciar_sesion() de la clase padre.

[HIGHLIGHT="PHP"]
<?php
//Inicio de sesión.
session_start();
//Ficheros requeridos.
require_once 'Web.php';
require_once 'usuario.php';
//Creación de la clase Biblioteca.
class Recepcion extends Web{
...
public function escribir_submenu_superior(){
echo " <!-- Submenú superior -->\n";
echo " <div class='submenu' id='submenu'>\n";
echo " \n";
if((!isset($_SESSION)) || ($this->leer_acceso() == $this::USUARIO_ANONIMO)){
echo " <form class='recepcion' id='inicio_sesion' action='".$_SERVER['PHP_SELF']."' method='post'>\n";
echo " <input type='hidden' name='accion' value='iniciar_sesion'>\n";
echo " <a href='javascript:document.getElementById(\"inicio_ sesion\").submit();'>Iniciar sesión</a> |\n";
echo " </form>\n";
}else{
echo " <form class='recepcion' id='fin_sesion' action='".$_SERVER['PHP_SELF']."' method='post'>\n";
echo " <input type='hidden' name='accion' value='finalizar_sesion'>\n";
echo " <a href='javascript:document.getElementById(\"finaliz ar_sesion\").submit();'>Finalizar sesión</a> |\n";
echo " </form>\n";
}
echo " \n";
echo " <form class='recepcion' id='recuperacion_clave' action='' method='post'>\n";
echo " <input type='hidden' name='accion' value='recuperar_clave'>\n";
echo " <a href='javascript:document.getElementById(\"recuper acion_clave\").submit();'>Recuperar la contraseña olvidada</a> |\n";
echo " </form>\n";
echo " \n";
echo " <form class='recepcion' id='registro_usuario' action='' method='post'>\n";
echo " <input type='hidden' name='accion' value='registrar_usuario'>\n";
echo " <a href='javascript:document.getElementById(\"registr o_usuario\").submit();'>Registrarse</a>\n";
echo " </form>\n";
echo " \n";
echo " </div>\n";
echo " <!-- Submenú superior (fin) -->\n";
echo " \n";
}
...
public function escribir_columna_derecha_inicio_sesion(){
...
echo " <form id='sesion' name='sesion' method='post' action='".$_SERVER['PHP_SELF']."'>\n";
echo " <p>\n";
echo " <label>\n";
echo " Nombre de usuario*:\n";
echo " <br/>\n";
echo " <input id='usuario' name='usuario' type='text' size='30%' />\n";
echo " </label>\n";
echo " </p>\n";
echo " <p>\n";
echo " <label>\n";
echo " Contraseña*:\n";
echo " <br/>\n";
echo " <input id='clave' name='clave' type='text' size='30%' />\n";
echo " </label>\n";
echo " </p>\n";
echo " <p>\n";
echo " <input id='iniciar_sesion' name='iniciar_sesion' type='submit' value='Iniciar' />\n";
echo " </p>\n";
echo " </form>\n";
echo " \n";
}
...
public function iniciar_sesion(){
//Se procesa la información.
if (isset($_POST['usuario'])){
if (isset($_POST['clave'])){
parent::iniciar_sesion($_POST['usuario'], $_POST['clave']);
//header('Location: ' . $_SERVER['SERVER_NAME']);
}else{
echo " <p>\n";
echo " <em>Resultado:</em> Por favor, introduzca la clave.\n";
echo " </p>\n";
}
}else{
echo " <p>\n";
echo " <em>Resultado:</em> Por favor, introduzca su nombre de usuario.\n";
echo " </p>\n";
}
}
...
}
...
//Creación de la página.
$web = new Recepcion(AUTOR,
FECHA_CREACION,
FECHA_MODIFICACION,
VERSION);

$web->escribir_doctype();
$web->iniciar_html();
$web->escribir_head();
$web->iniciar_body();
$web->escribir_capa_superpuesta();
$web->iniciar_contenedor();
$web->iniciar_encabezamiento();
$web->escribir_menu_superior();
$web->escribir_submenu_superior();
$web->escribir_mensaje_de_informacion('');
$web->escribir_mensaje_de_aviso('');
$web->escribir_mensaje_de_exito('');
$web->escribir_mensaje_de_error('');
$web->finalizar_encabezamiento();
$web->iniciar_columna_central();
$web->iniciar_columna_izquierda();
$web->titular_columna_izquierda(TITULO, SUBTITULO);
$web->escribir_columna_izquierda();
$web->indexar_inicio(HAY_ENLACE_AL_INICIO);
$web->finalizar_columna_izquierda();
$web->iniciar_columna_derecha();
$web->escribir_columna_derecha_introduccion();
if(isset($_POST['accion'])){
if($_POST['accion']=='iniciar_sesion'){
$web->escribir_columna_derecha_inicio_sesion();
}elseif($_POST['accion']=='recuperar_clave'){
$web->escribir_columna_derecha_recuperacion_clave();
}elseif($_POST['accion']=='registrar_usuario'){
$web->escribir_columna_derecha_registro_usuario();
}else{
//Nada.
}
}else{
//Nada.
}
if(isset($_POST['recuperar_clave'])){
$web->enviar_clave();
}
if(isset($_POST['iniciar_sesion'])){
$web->iniciar_sesion();
}
if(isset($_POST['accion'])){
$web->terminar_sesion();
}
if(isset($_POST['registrar_usuario'])){
$web->registrar_usuario();
}
$web->finalizar_columna_derecha();
$web->finalizar_columna_central();
$web->finalizar_contenedor();
$web->finalizar_body();
$web->finalizar_html();
?>