Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Phiên Php và đăng sự cố trong trang đăng nhập

Chỉnh sửa: Được rồi, vậy là bạn đã mắc lỗi đánh máy trong các trường biểu mẫu. Bạn vẫn đang trộn các API MySQL, hãy xem thêm bên dưới về hàm trộn bằng mysql_real_escape_string() .

Nhìn vào name="myusername" và bài tập ĐĂNG của bạn, cùng với bài tập cho mật khẩu của bạn.

Chúng không khớp nhau.

Thay đổi name="myusername" tới name="username"

name="mypassword" tới name="password"

theo

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

Đã sử dụng báo cáo lỗi , sẽ báo hiệu một chỉ mục không xác định và một tiêu đề đã được gửi cảnh báo; xem bên dưới.

Bạn cũng có khoảng trắng trước <?php mà sẽ tạo ra một đầu ra trước tiêu đề. Xóa chúng.

Ngoài ra, bạn đang trộn các API MySQL với mysql_error() . mysql_error() nên đọc là mysqli_error($con) và cái này bên dưới:

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

nên đọc là

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

hoặc

$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_mysql_ các chức năng không trộn lẫn với nhau.

Về bảo mật

Tôi nhận thấy rằng bạn có thể đang lưu trữ mật khẩu ở dạng văn bản thuần túy. Nếu đúng như vậy, rất không khuyến khích.

Tôi khuyên bạn nên sử dụng CRYPT_BLOWFISH hoặc password_hash() của PHP 5.5 hàm số. Đối với PHP <5.5, hãy sử dụng password_hash() compatibility pack .

Ngoài ra, liên quan đến SQL injection, sử dụng mysqli với các tuyên bố được chuẩn bị sẵn hoặc PDO với các báo cáo đã chuẩn bị sẵn , chúng an toàn hơn nhiều .

Chú thích cuối trang

Tốt nhất là thêm exit; sau mỗi tiêu đề.

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

và cho tất cả các tiêu đề.

Chỉnh sửa:

Xóa

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

sau đó thay thế nó bằng:

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

Chỉnh sửa số 2 :

Đây là những gì tôi đã thử nghiệm mã của bạn và đã thành công, do đó, tôi không biết mã hiện tại của bạn có vấn đề gì.

BIỂU MẪU 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: Bạn cũng nên xóa các phiên của mình ( hủy phiên ), có thể có thứ gì đó trên máy chủ đang lưu vào bộ đệm tên người dùng và mật khẩu cũ.

Ngoài ra, hãy đảm bảo rằng không có khoảng trắng nào trong các cột của bạn, rằng các loại là chính xác và độ dài đủ dài để chứa dữ liệu. Thông thường VARCHAR(255) là quá đủ, nhưng được đề xuất khi sử dụng mật khẩu băm được tạo bởi password_hash() , một chức năng mà bạn nên sử dụng khi lưu trữ mật khẩu.

Xem thêm:

trên Stack.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CakePHP 3 KHÔNG thể kết nối với cơ sở dữ liệu do thiếu phần mở rộng PHP

  2. Chọn dấu thời gian đầu tiên và cuối cùng nơi userID là duy nhất

  3. Mysql:Cắt tất cả các trường trong cơ sở dữ liệu

  4. CHỌN chỉ các hàng chỉ chứa các ký tự chữ và số trong MySQL

  5. MySQL tính tổng tích lũy với điều kiện đặt lại