Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: bgnumis en 25 Agosto 2019, 22:06 pm



Título: [Resuelto] Check Login y redirigir en función de un mail
Publicado por: bgnumis en 25 Agosto 2019, 22:06 pm
Hola, tengo creado (copiado de los tutoriales que orientan y ayudan para crear un login), cuando le das a login (donde pones tu nombre de usuario (email) y password) te redirige a checklogin.php

La cuestión es que me gustaría a partir de este checklogin.php añadir con SESSION una condicional que hago lo siguiente:

1.  si el Email que es el usuario de session y con el que me "logeo" es prueba@gmail.com entonces me redirija a prueba.php

 (subpregunta ¿Cómo hago para que en prueba debe hacer la comprobación de que el usuario está registrado y sino lo expulse?)

, y cualquier otra cosa me deje en el checklogin (en este caso parece que no te dejar acceder si no estás logeado, aunque ¿por qué no utiliza SESSION, cómo hacer que también utilice SESSION? lo cogí de un ejemplo, disculpad porque se me escoñó el pc y no recuerdo el autor, sino lo pondría por supuesto).

checklogin:

Código
  1.  
  2.  
  3. <?php
  4. ?>
  5.  
  6. <!doctype html>
  7. <html lang="en">
  8. <head>
  9. <title>Check Login and create session</title>
  10. <!-- Required meta tags -->
  11. <meta charset="utf-8">
  12. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  13.  
  14. <!-- Bootstrap CSS -->
  15. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
  16. </head>
  17. <body>
  18. <div class="container">
  19.  
  20. <?php
  21. // Connection info. file
  22. include 'conn.php';
  23.  
  24. // Connection variables
  25. $conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
  26.  
  27. // Check connection
  28. if (!$conn) {
  29. die("Connection failed: " . mysqli_connect_error());
  30. }
  31.  
  32. // data sent from form login.html
  33. $email = $_POST['email'];
  34. $password = $_POST['password'];
  35.  
  36. // Query sent to database
  37. $result = mysqli_query($conn, "SELECT Email, Password, Name FROM users WHERE Email = '$email'");
  38.  
  39. // Variable $row hold the result of the query
  40. $row = mysqli_fetch_assoc($result);
  41.  
  42. // Variable $hash hold the password hash on database
  43. $hash = $row['Password'];
  44.  
  45. /*
  46. password_Verify() function verify if the password entered by the user
  47. match the password hash on the database. If everything is OK the session
  48. is created for one minute. Change 1 on $_SESSION[start] to 5 for a 5 minutes session.
  49. */
  50. if (password_verify($_POST['password'], $hash)) {
  51.  
  52. $_SESSION['loggedin'] = true;
  53. $_SESSION['name'] = $row['Name'];
  54. $_SESSION['start'] = time();
  55. $_SESSION['expire'] = $_SESSION['start'] + (1 * 60) ;
  56.  
  57. echo "<div class='alert alert-success mt-4' role='alert'><strong>Welcome!</strong> $row[Name]
  58. <p><a href='edit-profile.php'>Edit Profile</a></p>
  59. <p><a href='logout.php'>Logout</a></p></div>";
  60.  
  61. } else {
  62. echo "<div class='alert alert-danger mt-4' role='alert'>Email or Password are incorrects!
  63. <p><a href='login.html'><strong>Please try again!</strong></a></p></div>";
  64. }
  65. ?>
  66. </div>
  67. <!-- Optional javascript -->
  68. <!-- jQuery first, then Popper.js, then Bootstrap JS -->
  69. <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  70. <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
  71. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
  72.  
  73. </body>
  74. </html>
  75.  
  76.  
  77.  


Título: Re: Check Login y redirigir en función de un mail
Publicado por: bgnumis en 26 Agosto 2019, 12:16 pm
Hola lo he conseguido¡


He puesto esto:

Código
  1.  
  2. if ( $email === 'prueba@gmail.com' ){
  3.  
  4. if (password_verify($_POST['password'], $hash)) {
  5.  
  6.  
  7.  
  8. header('Location:mipagina.php');
  9.  
  10. } else {
  11. echo "<div class='alert alert-danger mt-4' role='alert'>Email or Password are incorrects!
  12. <p><a href='login.html'><strong>Please try again!</strong></a></p></div>";
  13. }
  14.  
  15.  





Título: Re: Check Login y redirigir en función de un mail
Publicado por: #!drvy en 27 Agosto 2019, 12:13 pm
Código
  1. <?php
  2. $login_error = false;
  3.  
  4. // Si el usuario no tiene sesión iniciada pero si ha enviado email y contraseña...
  5. if (empty($_SESSION['loggedin']) && isset($_GET['email'], $_GET['password'])) {
  6.    $email = $_GET['email'];
  7.    $password = $_GET['password'];
  8.    $login_error = true;
  9.  
  10.    // Conectate a la BD solo cuando hace falta.
  11.    include 'conn.php';
  12.    $conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
  13.  
  14.    if (!$conn) {
  15.        die('Connection failed: ' . mysqli_connect_error());
  16.    }
  17.  
  18.    // Usa sentencias preparadas para evitar SQLi, asegurante de que solo sacas cuantos datos necesitas
  19.    // https://www.php.net/manual/es/mysqli.prepare.php
  20.    // https://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL
  21.    // https://www.owasp.org/index.php/SQL_Injection
  22.    $stmt = mysqli_prepare($conn, 'SELECT Email, Password, Name FROM users WHERE Email = ? LIMIT 1');
  23.    mysqli_stmt_bind_param($stmt, 's', $email);
  24.    mysqli_stmt_execute($stmt);
  25.    $res = mysqli_stmt_get_result($stmt);
  26.    $row = mysqli_fetch_assoc($res);
  27.  
  28.    if (!empty($row['Password']) && password_verify($password, $row['Password'])) {
  29.        $_SESSION['loggedin'] = true;
  30.        $_SESSION['name'] = $row['Name'];
  31.        $_SESSION['start'] = time();
  32.        $_SESSION['expire'] = $_SESSION['start'] + (1 * 60);
  33.        $login_error = false;
  34.  
  35.        // Siempre comprueba los strings con 3 =
  36.        // https://www.php.net/manual/en/language.operators.comparison.php
  37.        if ($email === 'prueba@gmail.com') {
  38.            header('Location: mipagina.php');
  39.            exit;
  40.        }
  41.    }
  42. }
  43. ?>
  44.  
  45. <!doctype html>
  46. <html lang="en">
  47.  
  48. <head>
  49.    <title>Check Login and create session</title>
  50.    <!-- Required meta tags -->
  51.    <meta charset="utf-8">
  52.    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  53.  
  54.    <!-- Bootstrap CSS -->
  55.    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
  56. </head>
  57.  
  58. <body>
  59.    <div class="container">
  60.        <?php if (!empty($_SESSION['loggedin']) && !$login_error) : ?>
  61.  
  62.            <div class='alert alert-success mt-4' role='alert'>
  63.                <strong>Welcome!</strong>
  64.                <?php
  65.                    // Asegurate de imprimir escapar HTML cuando imprimes input del usuario
  66.                    echo htmlentities($_SESSION['name']);
  67.                ?>
  68.                <p><a href='edit-profile.php'>Edit Profile</a></p>
  69.                <p><a href='logout.php'>Logout</a></p>
  70.            </div>
  71.  
  72.        <?php else : ?>
  73.  
  74.            <div class='alert alert-danger mt-4' role='alert'>
  75.                Email or Password are incorrect!
  76.                <p><a href='login.html'><strong>Please try again!</strong></a></p>
  77.            </div>
  78.  
  79.        <?php endif; ?>
  80.    </div>
  81.    <!-- Optional javascript -->
  82.    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
  83.    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  84.    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
  85.    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
  86.  
  87. </body>
  88. </html>


Los consejos los he dejado en código.

Saludos