Multiple Login dengan Cookie dan Database MySQL

Ilustrasi multi login (Sumber Gambar:Pixabay/patricksommer)

Terkait posting sebelumnya, penulis tertarik untuk membuat login user menggunakan PHP dan SQL, yang dapat dilakukan dengan device yang berbeda, tanpa menggunakan session PHP.

Masih menggunakan kode PHP yang sama (dari posting sebelumnya), dan dengan melakukan sedikit perubahan, penulis memodifikasi dengan orientasi login tidak hanya dari satu device, tetapi dapat dilakukan dari device yang berbeda, terutama penulis mengubah pada struktur databasenya.

Dimana database dibagi menjadi dua tabel, yaitu tabel users dan tabel access.

Tabel access disini penulis gunakan sebagai pengganti session PHP.

Sehingga setiap device yang digunakan untuk login akan disetting dengan nilai login_key dan masa kadaluarsa sendiri-sendiri, yang terekam di tabel access.

Berikut ini adalah beberapa kode utama yang penulis gunakan di sistem login project yang sedang penulos kerjakan, saat tulisan ini ditulis.

Database MySQL

CREATE TABLE users ( 
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    username VARCHAR(50) NOT NULL UNIQUE, 
    passcode VARCHAR(255) NOT NULL, 
    userlevel INT(2) DEFAULT 1, 
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP 
); 
 
CREATE TABLE access ( 
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    username VARCHAR(50) NOT NULL, 
    passkey VARCHAR(255) NOT NULL, 
    userlevel INT(2) DEFAULT 1, 
    login_at DATETIME DEFAULT CURRENT_TIMESTAMP 
); 

login.php

$myusername = filter_var($_POST['userid'], FILTER_SANITIZE_STRING); 
   $mypassword = md5(filter_var($_POST['passid'], FILTER_SANITIZE_STRING)); 
 
   $sql = "SELECT id,userlevel FROM users WHERE username = '$myusername' AND passcode = '$mypassword'"; 
   $result = mysqli_query($dbconnection,$sql); 
   if($result){ 
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
    $id=$row['id']; 
    $myuserlevel=$row['userlevel']; 
    $count = mysqli_num_rows($result); 
    if($count == 1){ 
     $pasangcookie=false; 
     $requestinsert=false; 
     $passkey=getRandomChar(rand(20,45)); 
     $sql = "SELECT id,login_at,now() FROM access WHERE username = '$myusername'"; 
     $result = mysqli_query($dbconnection,$sql); 
     if($result){ 
      $count = mysqli_num_rows($result); 
      if($count>0){ 
       $ketemu=false; 
       while($row=$result -> fetch_array(MYSQLI_NUM)){ 
        $minutes = getDiffMinutes($row[1],$row[2]); 
        echo $minutes; 
        if($minutes>59){ 
         $ketemu=true; 
         $sql = "UPDATE access SET passkey = '$passkey',login_at=now() WHERE id='".$row[0]."'"; 
         $result = mysqli_query($dbconnection,$sql); 
         if($result){ 
          $pasangcookie=true; 
          break; 
         } 
        } 
       } 
       if(!$ketemu){ 
        $requestinsert=true; 
       } 
      }else{ 
       $requestinsert=true; 
      } 
     }else{ 
      $requestinsert=true; 
     } 

     if($requestinsert){ 
      $sql = "INSERT INTO access (username,passkey,userlevel) VALUES ('$myusername','$passkey','$myuserlevel')"; 
      $result = mysqli_query($dbconnection,$sql); 
      if($result){ 
       $pasangcookie=true; 
      }else $ErrorMessage = "Error insert acces!"; 
     } 

     if($pasangcookie){ 
      setcookie("login_user",$myusername, time()+3600, "/"); 
      setcookie("login_key",$passkey, time()+3600, "/"); 
      header("Location:dashboard.php"); 
     } 
    }else { 
     $ErrorMessage = "Your login name or password is invalid"; 
    } 
   }else{ 
    $ErrorMessage=mysqli_error($dbconnection); 
   } 

checklogin.php

if(isset($_COOKIE["login_user"]) && !empty($_COOKIE['login_user'])){ 
 $sql = "SELECT id,login_at,now() FROM access WHERE username = '".$_COOKIE["login_user"]."' AND passkey = '".$_COOKIE["login_key"]."'"; 
 $result = mysqli_query($dbconnection,$sql); 
 if($result){ 
  $count = mysqli_num_rows($result); 
  if($count==1){ 
   $row=mysqli_fetch_array($result); 
   $minutes = getDiffMinutes($row[1],$row[2]); 
   if($minutes>59){ 
    showErrorMessage("Login expired in server!"); 
   }else{ 
    $sql = "UPDATE access SET login_at=now() WHERE id = '".$row[0]."'"; 
    $result = mysqli_query($dbconnection,$sql); 
    if($result){ 
     setcookie("login_user",$_COOKIE["login_user"], time()+3600, "/"); 
     setcookie("login_key",$_COOKIE["login_key"], time()+3600, "/"); 
    }else showErrorMessage("Error at get time stamp!"); 
   } 
  }else{ 
   showErrorMessage("Login expired!"); 
  } 
 }else showErrorMessage("Cannot check into database!"); 
}else{ 
 header("Location:index.php"); 
} 

Perlu diperhatikan, kode diatas bukan kode yang sebenarnya penulis pakai di dalam project, hanya cuplikan-cuplikan saja.

Komentar



Postingan populer dari blog ini

Kumpulan Source Code Greenfoot

Game TicTacToe dengan Greenfoot

Algorithma Coretan Abstrak dengan HTML5 Canvas

Cara Membuat Halaman HTML Sederhana

Honeycomb Style Wallpaper dengan HTML5 Canvas

Ganti Kartu ATM BNI yang Rusak

Mencoba Submit Theme di Wordpress.org

Tips Agar Website Anda Segera di Terima oleh Google Adsense dan di-Monetize

Cara Menentukan Arah Kiblat Menggunakan Google Maps

Selamatan Latar Glundengan Bubuk Banyuwangi