Cara menggunakan php session cookie_samesite

Buatlah tabel users untuk dengan struktur seperti di bawah (bisa menggunakan phpMyAdmin atau yang lain).

KolomTipe DataKeteranganidintegerprimary key, auto incrementusernamevarcharuniquepasswordvarcharsaltvarcharkarakter acak untuk perkuat passwordaktiftinyint1 = user aktif, 0 tidak aktifnamavarchar

Kolom lain bisa ditambahkan sesuai dengan kebutuhan

Mebuat file untuk validasi akses

Buatlah file cek-akses.php yang akan digunakan untuk validasi akses user. Apakah sudah login atau tidak. Variable $_SERVER (selengkapnya lilhat di https://php.net/$SERVER) akan digunakan untuk memvalidasi siapa browser dan alamat IP yang digunakan user. Jika browser dan alamat IP berubah makan user harus login lagi.




    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
0. Kemudian jika tidak ada informasi browser, IP atau user di session arahkan user ke halaman login. Selanjutnya cek apakah informasi browser yang disimpan di session sama dengan



    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
1 dan alamat IP sama dengan



    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
2. Jika misalnya cookie dicuri, maka tidak akan bisa digunakan karena alamat IP pencuri pasti berbeda. Kemudian file ini bisa di-include di file yang harus diakses setelah login seperti di bawah.




    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif

Sekarang buatlah file




    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
3 dan buat html form login seperti di bawah, dengan 2 input username dan password



    
        Login
    
    
        

Please login

Username atau password salah'; } ?>

Username

Password

Login

Kemudian di bagian paling atas file tambahkan kode php untuk membuat validasi password user.

prepare("select * from users where username=:username");
    $query->execute(array('username' => $_POST['username']));
    $user = $query->fetch();
    if (!$user) {
        $gagal = true;
    } elseif($user['aktif'] != 1 || $user['password'] != sha1($_POST['password'].$user['salt'])){
        $gagal = true;
    } else {
        $_SESSION['browser'] = md5($_SERVER['HTTP_USER_AGENT']);
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        $_SESSION['user'] = array(
            'id' => $user['id'],
            'nama' => $user['nama']
        );
        header("Location: admin.php");
        exit;
    }
}
?>

Kembali paling atas mulai session dengan




    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
4. Kemudian jika user mencoba login dengan mengklik tombol login, buat koneksi ke database dengan. File



    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
5 untuk membuat koneksi ke datatabase seperti kode di bawah. Di baris ke-6 sampai ke-8 kita cari data user dengan username yang telah dimasukkan user. Jika tidak tidak ditemukan (baris ke-9), set



    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
6 dengan



    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
7. Begitu juga jika user tidak aktif, atau password tidak sama dengan yang di database. Perhatikan baris ke-11.



    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
8 password yang di input user digabungkan dengan data



    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
9 dari database (lebih lengkah penjelasaany di bawah di form tambah user). Terakhir jika password benar dan user aktif maka simpan informasi browser, IP dan user ke session.

 PDO::ERRMODE_EXCEPTION
));

Membuat Logout

Setelah berhasil login maka user harus bisa logout. Membuat logout lebih sederhana yaitu dengan menghapus semua informasi session yang telah dibuat di form login seperti kode php di bawah dalam file



    
        Login
    
    
        

Please login

Username atau password salah'; } ?>

Username

Password

Login
0.



    
        Login
    
    
        

Please login

Username atau password salah'; } ?>

Username

Password

Login
1 dan tambahkan form untuk tambah user seperti di bawah.



    
        Tambah User
    
    
        

Tambah User

'.$error.''; } ?>

Nama

Username

Password

Ulang Password

Aktif

Simpan

Setelah itu tambahkan kode php untuk menambah user di bagian paling atas seperti di bawah.

prepare("insert into users (username, password, salt, nama, aktif) values(:username, :password,:salt,:nama,:aktif)");
            $string = str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
            $salt = sha1(substr($string, 0, 8).time().rand());
            $query->execute(array(
                'username' => $_POST['username'],
                'password' => sha1($_POST['password'].$salt),
                'salt' => $salt,
                'nama' => $_POST['nama'],
                'aktif' => $_POST['aktif']
            ));
            header("Location: admin.php");
            exit;
        } catch (Exception $e) {
            $error = $e->getMessage();
        }
    }
}
?>

Baris 5-7 kita lakukan validasi password dan ulang password harus sama. Di baris 11-12 kita membuat nilai




    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
9 menggunakan fungsi


    
        Login
    
    
        

Please login

Username atau password salah'; } ?>

Username

Password

Login
3,


    
        Login
    
    
        

Please login

Username atau password salah'; } ?>

Username

Password

Login
4 dan juga


    
        Login
    
    
        

Please login

Username atau password salah'; } ?>

Username

Password

Login
5 agar mendapatkan karakter acak yang lebih baik. Baris 13-19 digunakan untuk menyimpan data user. Perhatikan baris ke-15,


    
        Login
    
    
        

Please login

Username atau password salah'; } ?>

Username

Password

Login
6. Password disimpan dengan gabungan dengan password yang diisi oleh user dan juga salt dengan begitu password yang tersimpan di database tidak pernah sama. Walaupun user input data yang sama. Password juga disimpan dalam bentuk SHA1 sehingga tidak bisa dilihat dengan kasat mata. Dengan 2 kombinasi itu password akan susah ditebak seandainya database berhasil dicuri.

Kesimpulan

Dalam tutorial php membuat form login yang lebih aman ini telah dijelaskan cara untuk menangkal pencurian cookie, dengan memvalidasi browser dan alaman IP user. Kemudian password disimpan menggunakan SHA1 sehingga tidak bisa dilihat dengan kasat mata. Password juga dikombinasikan dengan




    
        Admin
        
    
    
        

Selamat Datang

Tambah User | Logout

prepare("select id,nama,aktif from users"); $query->execute(); while($user = $query->fetch()) { ?>
ID Nama Aktif
9 nilai acak yang membuat password yang disimpan di database tidak pernah sama walaupun user memasukkan password yang sama. Sehingga jika terjadi pencurian database password akan sudah ditebak. Perlu dicatat bahwa cara ini tidak benar benar 100% memberi jaminan keamanan. SHA1 dapat dipecahkan menggunakan super komputer. Untuk mengingkatkannya bisa menggunakan bcrypt namun lebih lambat dari pada SHA1. Pastikan juga website anda tidak memiliki masalah XSS. Sehingga cookie tidak mudah dicuri. Ikuti recomendasi dari setting cookie di php. Minimal set cookie


    
        Login
    
    
        

Please login

Username atau password salah'; } ?>

Username

Password

Login
8 dan gunakan SSL di website Anda.