Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/03/2013, 19:02
Manimecker
 
Fecha de Ingreso: junio-2007
Mensajes: 12
Antigüedad: 16 años, 10 meses
Puntos: 0
Exclamación Sesiones no funcionan en PHP.

Primero que nada, un caluroso saludo a quien sea que lea este mensaje y se compadezca de un usuario con un problema más. Mi agradecimiento con este tipo de foros de ayuda, son geniales! Bueno al grano.

Tengo la siguiente encomienda:
Crear una serie de páginas y scripts PHP que permitan:
  • Mostrar session_ID, nombre de la sesión y cantidad de visitas.
  • Permitir al usuario cerrar su sesión actual.
  • Si no se detecta sesión, permitir al usuario crear una nueva con un nombre de sesión establecido por el usuario.

Tengo todo hecho (según yo) bien... en la siguiente cantidad de páginas:

practica24.php Actua como Index!: Aquí se localiza la tabla de datos de la sesión.

Imagen:


Código:
Código PHP:
Ver original
  1. <html>
  2.     <head>
  3.         <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4.         <title>Práctica 24</title>
  5.         <style type="text/css">
  6.             #yellow { background-color: #FFFF00; }
  7.             body {
  8.                 width: 320px;
  9.                 margin: 0 auto;
  10.                 margin-top: 20px;
  11.                 margin-bottom: 30px;
  12.             }          
  13.             table, th, td {  border: 1px white inset; }
  14.         </style>
  15.     </head>
  16.    
  17.     <body>
  18.         <table>
  19.             <tr>
  20.                 <td colspan="2" id="yellow"><center><b>Información de la sesión</b></center></td>
  21.             </tr>
  22.             <tr>
  23.                 <td id="yellow">ID</td>
  24.                 <td>
  25.                     <?php
  26.                         $a = session_id();
  27.                         if(empty($a)) {
  28.                             echo "No hay sesion activa <a href='crear.php'>Crear nueva</a>";       
  29.                             }
  30.                         else { echo session_id(); }
  31.                     ?>
  32.                 </td>
  33.             </tr>
  34.             <tr>
  35.                 <td id="yellow">Número de accesos</td>
  36.                 <td>
  37.                     <?php
  38.                         if (!empty($a)) {
  39.                             if ( isset ($_SESSION['cont'])) {
  40.                                 echo "Visitas: ".++$_SESSION['cont']; }
  41.                             else {
  42.                                 $_SESSION['cont']=0;
  43.                                 echo "Visitas: ".++$_SESSION['cont']; }
  44.                         }
  45.                         else {
  46.                             echo "No hay visitas."; }
  47.                     ?>     
  48.                 </td>
  49.             </tr>
  50.             <tr>
  51.                 <td id="yellow">Nombre actual</td>
  52.                 <td>
  53.                     <?php
  54.                         if (!empty($a)) { echo session_name(); }
  55.                         else { echo "No existe"; }
  56.                        
  57.                            
  58.                     ?>
  59.                 </td>
  60.             </tr>
  61.             <tr>
  62.                 <td id="yellow">Nombre anterior</td>
  63.                 <td>
  64.                     <?php
  65.                         if ( isset ($nombreant) ) {
  66.                             echo $nombreant; }
  67.                         else {
  68.                             echo "No existe"; }
  69.                     ?>
  70.                 </td>
  71.             </tr>
  72.         </table>
  73.        
  74.         <div>
  75.             <center><a href="practica24.php">Actualizar</a> | <a href="cerrar.php">Cerrar sesión</a></center>
  76.         </div>
  77.     </body>
  78. </html>

cerrar.php: este archivo cierra la sesión actual.

Código
Código PHP:
Ver original
  1. <html>
  2.     <header>
  3.         <title>Cerrar sesión</title>
  4.     </header>
  5.  
  6.     <body>
  7.         <?php
  8.             session_start();
  9.             $nombreant = session_name();
  10.             if (ini_get("session.use_cookies")) {
  11.                 $params = session_get_cookie_params();
  12.                 setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"],
  13.                 $params["secure"], $params["httponly"]);
  14.             }
  15.             session_unset();
  16.             $_SESSION = array();
  17.             session_destroy();
  18.         ?>
  19.        
  20.         <h1>Sesión cerrada con éxito</h2>
  21.         <p>Su sesión anterior llamada como <?php echo $nombreant; ?> ha finalizado correctamente.</p>
  22.         <a href="practica24.php">Regresar al inicio</a>
  23.     </body>
  24. </html>

crear.php: este archivo permite al usuario crear una nueva sesión utilizando el nombre de su preferencia.

Imagen:


Código:
Código PHP:
Ver original
  1. <html lang="es">
  2.     <head>
  3.         <title>Crear sesión</title>
  4.     </head>
  5.     <body>
  6.         <?php
  7.             if (isset($_POST['nombre']))
  8.                 {
  9.                     $nom = $_POST['nombre'];
  10.                     session_name($nom);
  11.                     session_start();
  12.                     header("Location: practica24.php");
  13.                 }
  14.             else
  15.                 {
  16.         ?>     
  17.             <h1>Control de sesiones</h1>
  18.             <table align="center">
  19.             <form action="crear.php" method="POST"/>
  20.             <tr>
  21.             <td>Nombre de sesión:</td>
  22.             <td><input type="text" name="nombre"/></td>
  23.             </tr>
  24.             </form>
  25.         <?php
  26.             } ?>
  27.     </body>
  28. </html>

El problema viene siendo cuando creo la sesión, el servidor y el navegador crean la sesión y su respectiva cookie, pero cuando me regresa a la página principal me sigue diciendo que no tengo sesión activa, porque no detecta la id de la sesión, cuando en realidad ya la tengo creada e incluso en el cookie me aparece la ID de la sesión, miren la imagen:

https://docs.google.com/file/d/0B1irOGZTeC4HNGQweDFoYmIybEE/edit?usp=sharing

1er caso: No tengo sesión activa, la página me avisa a crear una.
2do caso: Me pide un nombre de sesión para crear la sesión y llamarla de la misma manera. Se coloca el nombre y se presiona Enter.
3er caso: Regresa a la página principal, debe mostrar información de la sesión creada, no la muestra. Sin embargo, el navegador muestra que la cookie y la sesión ha sido creada y se le asoció un número de sesión (session_ID).

¿Qué puedo hacer? ¿Está mal el código? ¿Tengo entendido mal el concepto de sesión?