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
login.php
checklogin.php
Perlu diperhatikan, kode diatas bukan kode yang sebenarnya penulis pakai di dalam project, hanya cuplikan-cuplikan saja.
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
Posting Komentar