PHP - Redireccion si no estas logueado

 
Vista:

Redireccion si no estas logueado

Publicado por sam (185 intervenciones) el 03/07/2014 18:05:49
Hola amigos/as, a ver si me pueden hechar una mano.

Tengo un codigo en un "archivo A" que me permite loguearme correctamente y me redirecciona a un archivo "B".

Esto funciona perfetamente. Pero cuando en el archivo "B" le meto un codigo php para que no se pueda acceder a el escribiendo su url directamente en el navegador saltandose el logueo previo.


Pues hace una cosa rara y es que si le coloco este codigo como digo en el archivo "B".

Entonces el archivo "A" (que es donde se tiene que loguear uno), ya no me manda al archivo "B" sino que redirecciona así mismo, osea al archivo "A" y no se porque hace esto.



codigo de archivo "A" llamado "indexe.php" que es donde se loguea uno primero:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
 
    @session_start();
 
        if( isset($_GET['error_sesion']) )
        {
            switch ($_GET['error_sesion'])
            {
            case 1:
                echo "<font color='red'><b>Contrase&ntilde;a introducida incorrecta</b></font>
                <p><a href='../lib/login.php?esesion=1'>Int&eacute;ntelo de nuevo</a></p>";
                break;
            case 2:
                echo "<font color='red'><b>Correo electr&oacute;nico introducido incorrecto</b></font>
                <p><a href='../lib/login.php?esesion=1'>Int&eacute;ntelo de nuevo</a></p>";
                break;
            case 3:
                echo "<font color='red'><b>Rellene los campos correctamente</b></font>
                <p><a href='../lib/login.php?esesion=1'>Int&eacute;ntelo de nuevo</a></p>";
                break;
            case 4:
                echo "<font color='red'><b>Error al conectarse a la base de datos</b></font>
                <p><a href='../lib/login.php?esesion=1'>Int&eacute;ntelo de nuevo</a></p>";
                break;
            case 5:
                echo "<font color='red'><b>Error al seleccionar la base de datos</b></font>
                <p><a href='../lib/login.php?esesion=1'>Int&eacute;ntelo de nuevo</a></p>";
                break;
            }
        }
        else
        {
            if (isset($_SESSION['username']))
            {
 
                echo '<br/>';
 
                echo 'Hola del indexe, '.'<b>'.$_SESSION['username'].'</b>.';
 
                echo '<div class="btn_cerrar_sesion">
               
                        <a href="../lib/login.php?esesion=1"><img src="../imgss/btn_cerrar_sesion.png" width="120" height="27" alt="boton_cerrar_sesion" /></a>
               
                </div>';
 
            }
            else
            {
                echo '<form method="POST" id="form-login" action="../lib/login.php">
       
                              <div class="titular_email">Correo electr&oacute;nico</div>
                             
                              <input type="text" name="email" id="input_email" tabindex="1" />

                              <div class="titular_password">Contrase&ntilde;a</div>
       
                              <input type="password" name="password" id="input_password" tabindex="2" />

                              <!--<div class="enlace_olvide_clave"><a href="">La olvidé</a></div>-->
       
                              <div class="btn_login"><input type=image src="../imgs/btn_login.png" id="btn_inicio" class="buttons" value="Entrar"></input></div>
                                   
                      </form>';
            }
        }
 
?>


codigo de archivo "B" llamado "indexe_log.php" que es al que deberia redireccionar una vez logueado:


1
2
3
4
5
<?php if(!$_SESSION['email'] == "admin@admin.com") {
          header('location: indexe.php');
          } ?>
 
    <?php echo 'Hola mundo !!!!!'; ?>

Dicho de otro modo:

en el momento del if($_SESSION['email'], el email tiene el valor de: [email protected]

que se metio previamente en el input para loguearse.

y como digo funciona perfectamente, se loguea bien. y manda a indexe_log perfectamente .

ahora va perfectamente si en el indexe_log no pongo el codigo:

1
2
3
4
5
6
7
8
9
<?php
 
    @session_start();
 
    if($_SESSION['email'] != "admin@admin.com") {
          header('location: indexe.php');
          }
 
?>

pero claro este codigo que hace que cuando me logueo en vez de redireccionarme de indexe.php a indexe_log.php me redirecciona de indexe.php al mismo indexe.php

y como digo si dejo el codigo de la discordia en indexe_log si intento entrar en indexe_log.php sin loguearme funciona bien y no me deja entrar redirecionandome a indexe.php eso si lo hace bien.


Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redireccion si no estas logueado

Publicado por xve (6935 intervenciones) el 03/07/2014 20:43:43
Hola Sam, no se muy bien que haces en el archivo ../lib/login.php, pero siempre que quieras trabajar con las variables de sesión, tienes que poner el session_start(), si no lo pones, no tiene nunca valor las variables de $_SESSION

Una prueba seria hacer algo como esto:
1
2
3
4
5
<?
session_start();
echo $_SESSION['email'];
exit();
?>
De esta manera, verías exactamente que contenido tiene la variable.

Espero que te sirva para ver que esta pasando.


P.D. No se porque lo declaras con una arroba delante @session_start()¿?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Redireccion si no estas logueado

Publicado por Sam (185 intervenciones) el 03/07/2014 20:59:08
Hola xve:

Mira el codigo que gestiona el usuario y contraseña es este llamado login.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
 
session_start();
 
//datos para establecer la conexion con la base de mysql.
include "conex.php";
 
if ($_GET['id'] != "")
 
{
  $link=Conectarse();
  $id_recibido = $_GET["id"];
 
 
  $result = mysql_query("select * from users where id = '$id_recibido'");
 
    if($row = mysql_fetch_array($result))
    {
 
        $_SESSION["username"] = $row["nombre"];
        /*$_SESSION["elavatar"] = $row["avatar"];*/
 
 
        //die (header('Location: ../indexe_log.php?id='.$id_recibido));
 
        die (header('Location: document.location = "../index_log.php"?id='.$id));
 
    }
}
 
else if( isset($_GET['esesion']) )
 
    {
        // Borramos toda la sesion
        session_unset();
        session_destroy();
        die (header('Location: ../indexe.php'));
    }
 
else
{
    if (trim($_POST["email"]) != "" && trim($_POST["password"]) != "")
    {
      $link=Conectarse();
      $email = strtolower(htmlentities($_POST["email"], ENT_QUOTES));
      $password = $_POST["password"];
 
 
      $result = mysql_query("select * from users where email = '$email' and password = '$password'");
 
      if($row = mysql_fetch_array($result))
      {
          if($row["password"] == $password)
          {
              $_SESSION["username"] = $row["nombre"];
              /*$_SESSION["elavatar"] = $row["avatar"];*/
 
 
              $id = $row["id"];
              //echo "Has sido logueado correctamente ".$_SESSION["k_username"]." <p>";
              //echo "<a href=\"index_log.php\"> Inicio </a>";
 
             die (header('Location: /../indexe_log.php?id='.$id));
 
          }else{
 
            //Password incorrecto
              $error_sesion=1;
              $direccion='/indexe.php?error_sesion='.$error_sesion;
              die (header("Location: $direccion"));
          }
 
 
          }else{
               //Email incorrecto
                $error_sesion=2;
                $direccion='/indexe.php?error_sesion='.$error_sesion;
                die (header("Location: $direccion"));
          }
 
 
          }else{
            //Debe especificar un email y password
              $error_sesion=3;
              $direccion='/indexe.php?error_sesion='.$error_sesion;
              die (header("Location: $direccion"));
          }
 
 
        mysql_free_result($result);
 
        mysql_close();
 
}
 
?>

solo me falta esto para que funcione

:-(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redireccion si no estas logueado

Publicado por xve (6935 intervenciones) el 04/07/2014 07:45:16
Hola Sam, donde defines la variable $_SESSION['email']??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Redireccion si no estas logueado

Publicado por sam (185 intervenciones) el 04/07/2014 09:02:07
xve, xve ya he dado con la solucion:

mira en el archivo indexe_log.php

1
2
3
4
5
6
7
8
9
<?php
 
    @session_start();
 
    if($_SESSION['email'] != "admin@admin.com") {
          header('location: indexe.php');
          }
 
?>

PERO lo que hay que poner es esto:

1
2
3
4
5
6
7
8
9
<?php
 
    @session_start();
 
    if(isset($_SESSION['username']) !="admin") {
          header('location: indexe.php');
          }
 
?>

y segun he investigado para que este mejor hay que ponerlo asi:

1
2
3
4
5
6
7
8
<?php session_start();
header("Cache-control: private");
header("Cache-control: no-cache, must-revalidate");
header("Pragma: no-cache");
if(isset($_SESSION['username']) !="admin") {
header('Location: indexe.php');
}
?>

Ya va todo como un reloj suizo, pero solo me queda una cosa por solucionar que me he dado cuenta.

y es que el primer error que deberia lanzar si no se mete la contraseña correcta de usuario no funciona

es decir si meto el email correcto y la contraseña incorrecta y dice que "el email es incorrecto" cuando deberia decirme "la contraseña es incorrecta".

Puedes ayudarme con eso es que no doy con la tecla. :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redireccion si no estas logueado

Publicado por xve (6935 intervenciones) el 04/07/2014 20:46:47
Hola Sam, gracias por comentar el error...

Sobre tu pregunta, yo te recomendaría que no dieras pistas... si alguno de los dos campos esta mal, simplemente indica que no se encuentra... yo no especificaría que parte del correo o contraseña son incorrectos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar