Mysql
 sql >> Database >  >> RDS >> Mysql

Php Session e problemi con i post nella pagina di accesso

Modifica: Ok, quindi hai fatto un errore di battitura nei campi del modulo. Stai ancora mixando API MySQL, vedi più sotto sulla funzione di mixaggio usando mysql_real_escape_string() .

Guarda name="myusername" e il tuo incarico POST, insieme a quello per la tua password.

Non corrispondono.

Cambia name="myusername" a name="username"

e name="mypassword" a name="password"

come da

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

Aver utilizzato segnalazione errori , avrebbe segnalato un indice non definito e un avviso di intestazione già inviato; vedi sotto.

Hai anche spazi prima di <?php che causerebbe un output prima dell'intestazione. Rimuovili.

Inoltre, stai mescolando API MySQL con mysql_error() . mysql_error() dovrebbe essere letto come mysqli_error($con) e questo qui sotto:

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

che dovrebbe essere letto come

$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_ e mysql_ le funzioni non si mescolano insieme.

Per quanto riguarda la sicurezza

Ho notato che potresti memorizzare le password in testo normale. Se questo è il caso, è altamente sconsigliato.

Ti consiglio di utilizzare CRYPT_BLOWFISH o password_hash() di PHP 5.5 funzione. Per PHP <5.5 usa il password_hash() compatibility pack .

Inoltre, per quanto riguarda l'iniezione SQL, usa mysqli con dichiarazioni preparate o DOP con dichiarazioni preparate , sono molto più sicuri .

Note a piè di pagina

È meglio aggiungere exit; dopo ogni intestazione.

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

e per tutte le intestazioni.

Modifica:

Rimuovi

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

quindi sostituiscilo 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']);

Modifica n. 2 :

Questo è ciò con cui ho testato il tuo codice e ho avuto successo, quindi non so cosa c'è che non va nel tuo codice attuale.

MODULO 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";
    }

NB: Dovresti anche cancellare le tue sessioni (distruggi le sessioni ), potrebbe esserci qualcosa sul server che memorizza nella cache vecchi nomi utente e password.

Assicurati inoltre che non ci siano spazi nelle colonne, che i tipi siano corretti e che le lunghezze siano sufficientemente lunghe da contenere i dati. Di solito VARCHAR(255) è più che sufficiente, ma è consigliato quando si utilizzano password con hash generate da password_hash() , una funzione da utilizzare durante la memorizzazione delle password.

Vedi anche:

in pila.