Session atau Sesi? Dalam web session atau sesi digunakan untuk membatasi pengguna, kadangkala pengguna dapat mengakses halaman “A” bila melalui tahapan tertentu seperti login dimana pengguna melakukan proses login maka pengguna dapat dikatakan telah masuk ke sesi login dan apabila sesi login diakhiri yaitu pengguna melakukan logout atau yang di sebut keluar dari sesi maka halaman “A” tersebut tidak dapat lagi diakses karena pengguna sudah tidak lagi berada dalam sesi login.
Dalam pemrograman PHP pembuatan sesi dilakukan dengan meletakkan fungsi session_start() pada baris pertama halaman dan mengisi variable super global $_SESSION[] dengan data sesi dan variable $_SESSION[] dapat dibuat lebih dari satu.
baiklah mari ikuti langkah demi langkah untuk membuat halaman sesi untuk website.
Langkah 1, Buat database
CREATE DATABASE mesinketik_contoh CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci';
jangan lupa buat tabelnya juga
CREATE TABLE tb_user ( user VARCHAR(20) COLLATE latin1_swedish_ci NOT NULL DEFAULT '', sandi VARCHAR(65) COLLATE latin1_swedish_ci DEFAULT NULL, nama VARCHAR(50) COLLATE latin1_swedish_ci DEFAULT NULL, tgl_lahir DATE DEFAULT NULL, email VARCHAR(50) COLLATE latin1_swedish_ci DEFAULT NULL, phone VARCHAR(15) COLLATE latin1_swedish_ci DEFAULT NULL, sex TINYINT(1) DEFAULT '1', PRIMARY KEY (user) )ENGINE=MyISAM CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci';
Langkah 2, siapkan file pendukung
langkah ini adalah langkah yang bertujuan untuk mempercantik halaman yang akan dikerjakan, file nya digunakan adalah
- bootstrap
- fontawesome
- jquery
Langkah 3, Buat file konfigurasi
pettama buat file config.php file ini digunakan sebagai file konfigarasi database, berikut kodenya
file config.php
<?php session_start(); $db_host="localhost"; $db_user="root"; $db_pass=""; $db_name="mesinketik_contoh"; try{ $db_con=new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass); $db_con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); }catch(PDOExcepcion $e){ echo $e->getMessage(); } include_once 'class.user.php'; $user=new user($db_con); include_once 'class.template.php'; $template=new template();
lihat baris 13, include_once 'class.user.php';
pada kode tersebut dibutuhkan file class.user.php
lihat baris 15, include_once 'class.template.php';
pada kode tersebut dibutuhkan file class.template.php
file class.user.php
file class.user.php dibuat untuk berinteraksi dengan tabel tb_user yang telah dibuat sebelumnya, berikut kodenya
<?php class user{ private $db; function __construct($db_con){ $this->db=$db_con; } public function register($uname,$upass,$nama,$tgl,$mail,$phone,$jk){ try{ $new_password=password_hash($upass,PASSWORD_DEFAULT); $stmt=$this->db->prepare("INSERT INTO tb_user (user, sandi, nama, tgl_lahir, email, phone, sex) VALUES (:user, :sandi, :nama, :tgl_lahir, :email, :phone, :sex)"); $stmt->bindparam(":user",$uname); $stmt->bindparam(":sandi",$new_password); $stmt->bindparam(":nama",$nama); $stmt->bindparam(":tgl_lahir",$tgl); $stmt->bindparam(":email",$mail); $stmt->bindparam(":phone",$phone); $stmt->bindparam(":sex",$jk); $stmt->execute(); return $stmt; }catch (PDOException $e){ echo $e->getMessage(); } } public function login($uname,$upass){ try{ $stmt=$this->db->prepare("select * from tb_user where user=:user limit 1"); $stmt->bindparam(":user",$uname); $stmt->execute(); $userRow=$stmt->fetch(PDO::FETCH_ASSOC); if($stmt->rowCount()>0){ if(password_verify($upass,$userRow['sandi'])){ $_SESSION['user_session']=$userRow['user']; return true; }else{ return false; } } }catch(PDOException $e){ echo $e->getMessage(); } } public function is_loggedin(){ if(isset($_SESSION['user_session'])){ return true; }else{ return false; } } public function redirect($url){ header("location:$url"); } public function logout(){ session_destroy(); unset($_SESSION['user_session']); return true; } }
file class.template.php
dan file yang keduanya adalah class.template.php, file ini akan digunakan untuk menyimpan layout halaman yang akan di buat, gunanya biar layout halaman yang sama tidak ditulis berulang kali, berikut kodenya
<?php class template{ public function template_header($title){ echo <<<EOT <!doctype html> <html lang="id"> <head> <meta charset="utf-8"> <meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no'> <title>$title</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <link href='fontawesome/css/all.css' rel='stylesheet'> <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script> <script defer src="fontawesome/js/all.js"></script> </head> <body> EOT; } public function template_menu(){ echo <<<EOT <nav class="navbar navbar-expand-lg navbar-dark bg-primary mb-5"> <a class="navbar-brand" href="index.php">Beranda</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mr-auto"> <li class="nav-item"> <a class="nav-link" href="login.php">Masuk</a> </li> <li class="nav-item"> <a class="nav-link" href="signup.php">Daftar</a> </li> </ul> </div> </nav> EOT; } public function template_menu_user(){ echo <<<EOT <nav class="navbar navbar-expand-lg navbar-dark bg-success mb-5"> <a class="navbar-brand" href="index.php">Beranda</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mr-auto"> <li class="nav-item"> <a class="nav-link" href="?logout" data-toggle="modal" data-target="#exampleModal">Keluar</a> </li> </ul> </div> </nav> EOT; } public function template_footer() { echo <<<EOT <footer> <div class="jumbotron jumbotron-fluid mb-0 mt-5"> <div class="text-center"> <div class="btn-group mb-1" role="group" aria-label="Basic example"> <a class="btn btn-primary" href="mesinketik.com.desalompotengah.com" role="button"><i class="fa fa-globe"></i></a> <a class="btn btn-primary" href="mesinketik.com.desalompotengah.com" role="button">mesinketik.com.desalompotengah.com</a> </div> <div class="btn-group mb-1" role="group" aria-label="Basic example"> <a class="btn btn-primary" href="delphi.mesinketik.com" role="button"><i class="fa fa-globe"></i></a> <a class="btn btn-primary" href="delphi.mesinketik.com" role="button">delphi.mesinketik.com</a> </div> <div class="btn-group mb-1" role="group" aria-label="Basic example"> <a class="btn btn-primary" href="https://www.instagram.com/mesinketikdotcom/" role="button"><i class="fab fa-instagram"></i></a> <a class="btn btn-primary" href="https://www.instagram.com/mesinketikdotcom/" role="button">Instagram</a> </div> <div class="btn-group mb-1" role="group" aria-label="Basic example"> <a class="btn btn-primary" href="https://twitter.com/mesinketik_com" role="button"><i class="fab fa-twitter"></i></a> <a class="btn btn-primary" href="https://twitter.com/mesinketik_com" role="button">twitter</a> </div> <div class="btn-group mb-1" role="group" aria-label="Basic example"> <a class="btn btn-primary" href="https://www.facebook.com/mesinketikdotcom/" role="button"><i class="fab fa-facebook-square"></i></a> <a class="btn btn-primary" href="https://www.facebook.com/mesinketikdotcom/" role="button">facebook</a> </div> </div> </div> </footer> </body> </html> EOT; } }
Langkah 4, Buat halaman
index.php
file index.php adalah file yang pertama kali diakses saat website di kunjungi. agar membuatnya bekerja (otomatis dibuka pada saat website di kunjungi), jangan merubah nama file ini, berikut kodenya:
<?php require_once 'config.php'; if($user->is_loggedin()!=""){ $user->redirect('user.php'); } if(isset($_POST['btn_login'])){ $uname=$_POST['uname']; $upass=$_POST['sandi']; if($user->login($uname,$upass)){ $user->redirect('user.php'); }else{ $error="wrong"; } } $template->template_header('Home'); $template->template_menu(); ?> <div class="container"> <h1>Judul Halaman</h1> <p>isi halaman.</p> </div> <?php $template->template_footer();?>
Pada tahap ini kalian sudah halaman sudah bisa diakses, tampilannya akan terlihat seperti gambar berikut
Selanjutnya agar bisa masuk ke halaman user dibutuhkan halaman login.php namun sebelumnya buat terlebih dahulu halaman signup.php untuk melakukan pengimputan data user di tb_user.
signup.php
Yap. Halaman ini adalah halaman form yang digunakan untuk menyimpan data user ke database, berikut kodenya.
<?php require_once 'config.php'; if ($user->is_loggedin()!=""){ $user->redirect('user.php'); } if(isset($_POST['btn_signup'])){ $uname=$_POST['uname']; $sandi=$_POST['sandi']; $nama=$_POST['nama']; $tgl=$_POST['tgl']; $mail=$_POST['mail']; $phone=$_POST['phone']; $jk=$_POST['jk']; if(empty($uname)){ $error[]="error unama"; }else if(empty($sandi)){ $error[]="error pass"; }else if(strlen($sandi)<6){ $error[]="sandi kurang 6"; }else{ try{ $stmt=$db_con->prepare("select * from tb_user where user=:uname"); $stmt->execute(array(':uname'=>$uname)); $row=$stmt->fetch(PDO::FETCH_ASSOC); if($row['user']==$uname){ $error[]="user sudah ada"; }else{ if($user->register($uname,$sandi,$nama,$tgl,$mail,$phone,$jk)){ $user->redirect('signup.php?joined'); } } }catch(PDOException $e){ echo $e->getMessage(); } } } $template->template_header('daftar'); $template->template_menu(); ?> <div class="container mt-5 mb-5"> <div class="row justify-content-md-center"> <div class="col col-md-7"> <div class="card"> <div class="card-header"> SILAHKAN DAFTAR </div> <div class="card-body"> <?php if(isset($error)){ foreach($error as $error){ ?> <div class="alert alert-danger alert-dismissible fade show" role="alert"> <?=$error?> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <?php }} if(isset($_GET['joined'])){ ?> <div class="alert alert-success alert-dismissible fade show" role="alert"> Selamat bergabung, <a href="login.php">Silahkan login</a> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <?php } ?> <form method="post"> <div class="form-group row"> <label for="uname" class="col-sm-3 col-form-label">Nama Pengguna</label> <div class="col-sm-9"> <input type="text" class="form-control" id="uname" placeholder="Nama Pengguna" name="uname"> </div> </div> <div class="form-group row"> <label for="sandi" class="col-sm-3 col-form-label">Sandi</label> <div class="col-sm-9"> <input type="password" class="form-control" id="sandi" placeholder="Password" name="sandi"> </div> </div> <div class="form-group row"> <label for="nama" class="col-sm-3 col-form-label">Nama Lengkap</label> <div class="col-sm-9"> <input type="text" class="form-control" id="nama" placeholder="Nama Lengkap" name="nama"> </div> </div> <div class="form-group row"> <label for="tgl" class="col-sm-3 col-form-label">Tanggal Lahir</label> <div class="col-sm-9"> <input type="date" class="form-control" id="tgl" placeholder="Tanggal Lahir" name="tgl"> </div> </div> <div class="form-group row"> <label for="mail" class="col-sm-3 col-form-label">email</label> <div class="col-sm-9"> <input type="email" class="form-control" id="mail" placeholder="email" name="mail"> </div> </div> <div class="form-group row"> <label for="phone" class="col-sm-3 col-form-label">Telepon</label> <div class="col-sm-9"> <input type="number" class="form-control" id="phone" placeholder="Nomor Telepon" name="phone"> </div> </div> <div class="form-group row"> <label class="col-sm-3 col-form-label">Jenis Kelamin</label> <div class="col-sm-9"> <div class="custom-control custom-radio"> <input type="radio" class="custom-control-input" id="pria" name="jk" value="1" required checked> <label class="custom-control-label" for="pria">Pria</label> </div> <div class="custom-control custom-radio mb-3"> <input type="radio" class="custom-control-input" id="wanita" name="jk" value="0" required> <label class="custom-control-label" for="wanita">wanita</label> </div> </div> </div> <div class="form-group row"> <label for="sandi" class="col-sm-3 col-form-label"></label> <div class="col-sm-9"> <button type="submit" class="btn btn-primary" name="btn_signup">DAFTAR</button> </div> </div> </form> </div> </div> </div> </div> </div> <?php $template->template_footer();?>
Cobo klik daftar pada halaman utama, lihat gambar 3.
Silahkan buat akun untuk digunakan pada saat login dan selanjutnya buat halaman login.php
login.php
<?php require_once 'config.php'; if($user->is_loggedin()!=""){ $user->redirect('user.php'); } if(isset($_POST['btn_login'])){ $uname=$_POST['uname']; $upass=$_POST['sandi']; if($user->login($uname,$upass)){ $user->redirect('user.php'); }else{ $error="wrong"; } } $template->template_header('masuk'); $template->template_menu(); ?> <div class="container mt-5 mb-5"> <div class="row justify-content-md-center"> <div class="col col-md-4"> <div class="card"> <div class="card-header"> SILAHKAN MASUK </div> <div class="card-body"> <?php if(isset($error)){ ?> <div class="alert alert-danger alert-dismissible fade show" role="alert"> <?=$error?> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <?php } ?> <form method="post"> <div class="form-group"> <label for="uname">Nama Pengguna</label> <input type="text" class="form-control" id="uname" placeholder="Nama Pengguna" name="uname"> </div> <div class="form-group"> <label for="sandi">Sandi</label> <input type="password" class="form-control" id="sandi" placeholder="sandi" name="sandi"> </div> <button type="submit" class="btn btn-primary" name="btn_login">Masuk</button> </form> </div> </div> </div> </div> </div> <?php $template->template_footer();?>
Dan halaman login sudah bisa diakses, klik masuk pada menu, lihat gambar 5
bila nama pengguna dan sandi benar maka halaman akan dialihkan ke halaman user.php dan apabila salah akan muncul pesan kesalahan. Tapi sebelumnya harus dibuat halam user.php nya
user.php
Halaman user.php hanya dapat diakses pada saat login saya, dimana cara kerjanya adalah menyisipkan atau melakukan pendaftaran sesi pada saat login, berikut kode user.php
<?php require_once 'config.php'; if(!$user->is_loggedin()){ $user->redirect('index.php'); } $user_id=$_SESSION['user_session']; $stmt=$db_con->prepare("select * from tb_user where user=:user"); $stmt->execute(array(":user"=>$user_id)); $userRow=$stmt->fetch(PDO::FETCH_ASSOC); if(isset($_GET['logout'])){ if($user->logout()){ $user->redirect('index.php'); } } $template->template_header('user'); $template->template_menu_user(); ?> <div class="jumbotron jumbotron-fluid"> <div class="text-center"> <h3 class="display-4">Hello, <?=$_SESSION['user_session']?></h3> <div class="btn-group" role="group"> <a href="profile.php" class="btn btn-primary">Profile</a> <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#modalkeluar">Keluar</button> </div> </div> </div> <div class="modal fade" id="modalkeluar" tabindex="-1" role="dialog" aria-labelledby="modalkeluarLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-content"> <div class="modal-body text-center"> Terimakasih telah berkunung :) <hr> <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button> <a href="?logout" class="btn btn-danger">Keluar</a> </div> </div> </div> </div> <?php $template->template_footer(); ?>
Bila login berhasil maka akan dialihkan ke halaman user.
🙂 Tinggal dikembangkan lagi website kalian siap publish.
terimah kasih sudah berkunjung