2011-05-01 24 views
5

No puedo hacer que mis variables pasen a la siguiente página. La asignación de variables funciona bien en la página inicial (probada), pero el valor se anula cuando se pasa a la siguiente. Por favor ayuda!Sesiones PHP No funciona

Página 1:

<?PHP session_start(); ?> 
<HTML> 
<HEAD> 
    <META NAME='robots' CONTENT='noindex,nofollow'> 
    <TITLE>Master Chief's Gamestore</TITLE> 
    <STYLE type="text/css"> 
     BODY { 
      color: #ffffff; 
      background: url('~/halo-reach.jpg'); 
      background-repeat: no-repeat; 
      background-position: top; 
      background-color: black; 
     } 
    </STYLE> 
</HEAD> 
<body vLink='#3366CC' link='#3366CC' alink='#3366CC'> 
<br/><br/><br/><br/><br/> 
<table width='100%' height='80%'> 
    <tr> 
     <td align='center' valign='middle'> 
      <table width="50%" cellspacing="0" cellpadding="25" border="0"> 
       <form method="post"> 
        <tr bgcolor="#666633"> 
         <th id="header" align="left" colspan="3"> 
          <DIV align="center"> 
           <font face="Verdana, Arial, Helvetica" color="white" size="3"> 
            &nbsp; Master Chief's Gamestore </font> 
          </DIV> 
         </th> 
        </tr> 
        <tr bgcolor="#A3A385"> 
         <td width="100%" valign="middle" colspan="2"> 
          <font face="Verdana, Arial, Helvetica" size="2"> 
           <div align="center"><br/><br/> 
            Username:&nbsp 
            <input type="text" name="username">&nbsp 
            Password:&nbsp 
            <input type="password" name="password"><br/> 
            <br/><input type="submit" name="act" value="Login"><br/> 
            <input type="submit" name="act" value="Register"><br/> 
            <input type="submit" name="act" value="Main"><br/> <br/><br/> 
           </div> 
          </font> 
         </td> 
        </tr> 
        <?PHP 
        if ($_POST['act'] == "Login") { 
         mysql_connect("~", "~", "~") or die("unable to connect to server"); 
         mysql_select_db("~") or die("unable to select database"); 
         $user = $_POST['username']; 
         $pass = $_POST['password']; 
         $query = "select * from users where user like '%" . $user . "%' and pass like '%" . $pass . "%';"; 
         $result = mysql_query($query); 
         $rows = mysql_numrows($result); 
         if ($rows == 0 || strlen($user) == 0) { 
          echo "<br />Login Failure"; 
         } else { 
          $_SESSION['user'] = mysql_result($result, 0, "user"); 
          $_SESSION['id'] = mysql_result($result, 0, "P_Id"); 
          header('Location: ~/success.php'); 
         } 
        } 
        if ($_POST['act'] == "Register") { 
         header('Location: ~/register.php'); 
        } 
        if ($_POST['act'] == "Main") { 
         header('Location: ~/index.php'); 
        } 
        ?> 
        <div align="center"> 
         <tr bgcolor="#666633"> 
          <td align="left"> 
           Logged in as: 
           <?PHP 
           $user = $_SESSION['user']; 
           if (!$user) { 
            $user = 'Guest'; 
           } 
           echo $user; 
           ?> 
          </td> 
          <td align="right"> 
           Password:&nbsp 
           <input type="password" name="srcpw"> 
           <input type="submit" name="dspphp" value="Display PHP"> 
          </td> 
         </tr> 
        </div> 
       </form> 
      </table> 
     </td> 
    </tr> 
</table> 
</body> 
</html> 

Página 2:

<?PHP session_start(); ?> 
<HTML> 
<HEAD> 
    <META NAME='robots' CONTENT='noindex,nofollow'> 
    <TITLE>Master Chief's Gamestore</TITLE> 
    <STYLE type="text/css"> 
     BODY { 
      color: #ffffff; 
      background: url('~/halo-reach.jpg'); 
      background-repeat: no-repeat; 
      background-position: top; 
      background-color: black; 
     } 
    </STYLE> 
</HEAD> 
<body vLink='#3366CC' link='#3366CC' alink='#3366CC'> 
<br/><br/><br/><br/><br/> 
<table width='100%' height='80%'> 
    <tr> 
     <td align='center' valign='middle'> 
      <table width="30%" cellspacing="0" cellpadding="25" border="0"> 
       <form method="post"> 
        <tr bgcolor="#666633"> 
         <th id="header" align="left" colspan="3"> 
          <DIV align="center"> 
           <font face="Verdana, Arial, Helvetica" color="white" size="3"> 
            &nbsp; Master Chief's Gamestore </font> 
          </DIV> 
         </th> 
        </tr> 
        <tr bgcolor="#A3A385"> 
         <td width="100%" valign="middle" colspan="2"> 
          <font face="Verdana, Arial, Helvetica" size="2"> 
           <div align="center"> 
            <br/><br/>Success<br/><br/> 
            <input type='submit' name='main' value='Main'> 
            <?PHP 
            if ($_POST['main'] == "Main") { 
             header('Location: http://~/index.php'); 
            } 
            if ($_POST['act'] == "Display Code") { 
             if ($_POST['pw'] == "pass") { 
              highlight_file("success.php"); 
             } 
            } 
            ?> 
           </div> 
          </font> 
         </td> 
        </tr> 
        <div align="center"> 
         <tr bgcolor="#666633"> 
          <td align="left"> 
           Logged in as: 
           <?PHP 
           $user = $_SESSION['user']; 
           if (!$user) 
            $user = 'Guest'; 
           echo $user; 
           ?> 
          </td> 
          <td align="right"> 
           Password:&nbsp 
           <input type="password" name="pw"> 
           <input type="submit" name="dspphp" value="Display PHP"> 
          </td> 
         </tr> 
        </div> 
       </form> 
      </table> 
     </td> 
    </tr> 
</table> 
</body> 
</html> 

EDIT: He probado este código de ejemplo y no funciona.

Página 1:

<?php 
session_start(); 
if (isset($_GET['link'])) { 
    $_session['myvariable'] = 'Hello World'; 
    header('Location: http://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['REQUEST_URI']) . '/page2.php'); 
    exit; 
} 
?> 
<a href="<?php print $_SERVER['REQUEST_URI'] . '?link=yes'; ?>">Click Here</a> 

Página 2:

<?php 
session_start(); 
print 'Here is page two, and my session variable: '; 
print $_session['myvariable']; 
exit; 
?> 

Pero como he publicado a continuación, he utilizado las sesiones en las otras páginas con éxito en el mismo servidor. Soo frustrante ....

Gracias por todas las publicaciones por cierto!

+0

'http: // ~/index.php' Eso no es av alid URL, a menos que tenga un sitio en su red local llamado '~'. –

+0

He cambiado el código para no incluir información privada. – Josh

+0

Verifique mi respuesta editada con respecto a los encabezados enviados si aún no lo ha hecho. – Thilo

Respuesta

8

Asegúrate de que las cookies estén habilitadas, por lo que la segunda página realmente vuelve a crear la sesión de la primera página en lugar de crear una nueva, vacía. Consulte http://www.php.net/manual/en/session.idpassing.php para más detalles.

EDITAR

Otra posible causa de sesiones no funcionan como se esperaba, sobre todo si sólo afecta a ciertas páginas, es que tiene un espacio en blanco accidental o alguna otra salida antes de su primera 'session_start error()

+0

He ejecutado el código de muestra y no funciona, pero he usado sesiones anteriormente en este mismo servidor, páginas que todavía están alojadas y funcionan correctamente. – Josh

+0

Tuve que borrar la cookie de la página para que funcione. ¡Muchas gracias por señalarme el camino de las cookies! – Josh

2

Parece que está redirigiendo al usuario a la segunda página sin publicar nada. Debería establecer variables ocultas y enviar su formulario a la segunda página. Reorientar perderá todas las variables de publicación.

Si desea enviar variables a la segunda página con un redireccionamiento, puede usar variables de sesión o una variable GET pasada con la URL a la segunda página.

+0

Quizás mi formato sea confuso. Mi tarea se incluye en if ($ _ POST ['act'] == "Login"). ¿Es esto lo que quieres decir? – Josh

+0

Veo que comprueba la variable, pero la variable nunca llega a la segunda página debido a su redirección (línea de encabezado/ubicación) en la primera página. Cuando se redirige de esa manera, no pasa ninguna variable POST a la página siguiente. Entonces tendría que pasarlo con un GET o con una variable SESSION a la siguiente página. O puede usar Javascript para enviar el formulario de la primera página a la segunda página, pero sugiero una variable de sesión en caso de que las personas no tengan Javascript habilitado. – Mikecito

+0

Eso es lo que está haciendo: justo antes de la redirección, asigna valores a $ _SESSION. El problema es que $ _SESSION está vacío en la página siguiente. – Thilo

1

Trate de usar

$_SESSION['myvariable'] = 'Hello World'; 

en mayúsculas

+0

Sí, confiar en el código de prueba de otra persona probablemente fue un error. ¡Envié ese archivo a la papelera de reciclaje! Gracias de todos modos :) – Josh