sql >> Base de Datos >  >> RDS >> Mysql

Sesión Php y problemas de publicación en la página de inicio de sesión

Editar: Ok, cometiste un error tipográfico en los campos del formulario. Todavía está mezclando las API de MySQL, vea más abajo sobre la función de mezcla usando mysql_real_escape_string() .

Mira name="myusername" y su asignación POST, junto con la de su contraseña.

No coinciden.

Cambiar name="myusername" a name="username"

y name="mypassword" a name="password"

según

$myusername=$_POST["username"];
$mypassword=$_POST["password"];

Habiendo usado informe de errores , habría señalado un índice indefinido y una advertencia de encabezados ya enviados; ver más abajo.

También tienes espacios antes de <?php lo que causaría una salida antes del encabezado. Eliminarlos.

Además, está mezclando las API de MySQL con mysql_error() . mysql_error() debería leerse como mysqli_error($con) y esto a continuación:

$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

que debería leerse como

$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);

o

$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_ y mysql_ las funciones no se entremezclan.

En cuanto a la seguridad

Me di cuenta de que puede estar almacenando contraseñas en texto sin formato. Si este es el caso, se desaconseja encarecidamente.

Te recomiendo que uses CRYPT_BLOWFISH o password_hash() de PHP 5.5 función. Para PHP <5.5 use el password_hash() compatibility pack .

Además, con respecto a la inyección SQL, use mysqli con declaraciones preparadas , o PDO con declaraciones preparadas , son mucho más seguros .

Notas al pie

Lo mejor es agregar exit; después de cada encabezado.

header("location:login_success.php");
exit;

y para todos los encabezados.

Editar:

Quitar

$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";  
echo $mypassword . "<br>";

luego reemplácelo con:

$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);

Editar #2 :

Esto es con lo que probé su código y obtuve éxito, por lo tanto, no sé qué está mal con su código actual.

FORMULARIO HTML

<form action="main_login.php" method="post" style="text-align:right;">
    Username:   
    <input type="text" name="username" value="" size=20  style="display:inline-block;margin-left:10px"required>
    <br> 
    Password:  
    <input type="text" name="password" value="" size=20 style="margin-left:12px"required> 
    <br>  
    <input type="submit" value="Log In" style="margin-left:75px"=> 
</form>

MySQL

<?php

    $DB_HOST = 'xxx';
    $DB_USER = 'xxx';
    $DB_PASS = 'xxx';
    $DB_NAME = 'xxx';

    $conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
    if($conn->connect_errno > 0) {
      die('Connection failed [' . $conn->connect_error . ']');
    }

    $myusername = stripslashes($_POST["username"]);
    $mypassword = stripslashes($_POST["password"]);
    $myusername = mysqli_real_escape_string($conn,$_POST['username']);
    $mypassword = mysqli_real_escape_string($conn,$_POST['password']);


    echo $myusername; // echos
    echo "<br>";
    echo $mypassword; // echos


    $sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
    $result=mysqli_query($conn,$sql);

    $count=mysqli_num_rows($result);

    if($count==1){
        echo "Yep";
    }
    else{
        echo "nope";
    }

N.B.: También debe borrar sus sesiones (destruir sesiones ), podría haber algo en el servidor que almacene en caché nombres de usuario y contraseñas antiguos.

También asegúrese de que no haya espacios en sus columnas, que los tipos sean correctos y que las longitudes sean lo suficientemente largas para contener los datos. Normalmente VARCHAR(255) es más que suficiente, pero se sugiere cuando se usan contraseñas hash generadas por password_hash() , una función que debería utilizar al almacenar contraseñas.

Véase también:

en la pila.