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

Apps Script untuk Cetak Sertifikat

Kebodohan Karyawan Menyalahkan Sistem

Kode Apps Script MailApp untuk Form Mengirimkan Email

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Generate Karakter Acak dan Menempatkannya di Sel Google Sheets dengan Apps Script

Menyembunyikan Failed Load Images di Blogger

Algorithma Bilangan Prima dengan Javascript

Apps Script untuk Mengirimkan Notifikasi Approval

Mencoba Submit Theme di Wordpress.org

Menghapus Baris di Google Sheets yang Memiliki Sel Kosong dengan Apps Script