Friday, May 25, 2012

Konfigurasi JavaScript Cookie

Cookie sebenarnya hanyalah memori peramban yang tercipta untuk menyimpan data kecil berupa teks. Sekedar untuk memberikan indikasi apakah sesuatu harus diingat atau tidak. Memori ini digunakan untuk membuat peramban mengingat sesuatu saat mengunjungi situs yang pernah dia kunjungi. Satu contoh yang paling umum ada pada semua halaman login situs. Dalam halaman login tersebut biasanya terdapat pilihan Ingat saya? atau Remember me? atau Keep me logged in? seperti ini:

Formulir Login Facebook
Formulir Login Facebook

Saat Anda mengecek kotak centang tersebut sebelum melakukan login, maka setelah Anda melakukan login, dan kemudian Anda menutup peramban kemudian membukanya lagi, Anda tidak perlu melakukan login untuk yang ke dua kalinya karena peramban yang sedang Anda gunakan telah menyimpan data login Anda. Begitulah fungsi kuki secara umum (Sebenarnya Saya masih tidak begitu yakin apakah cara kerja ‘ingat Saya?’ pada aplikasi login informasi menggunakan sesuatu sesederhana kuki atau tidak. Mohon dikoreksi).

Saya berikan sebuah demo sederhana terlebih dahulu. Bukan demo formulir login akun (kuki login tidak dibuat begitu saja dengan JavaScript. Itu bisa mengancam keamanan akun), tapi konsep kotak dialog yang hanya akan tampil sekali saja:

Lihat Demo

Dasar Kerja

  1. Dasar kerjanya adalah, saat sebuah halaman terbuka maka kotak dialog akan tampil.
  2. Saat Anda menutup kotak dialog tersebut, di balik itu sebenarnya Anda juga telah menciptakan kuki untuk mengingat sesi penutupan kotak dialog.
  3. Setelah kuki kotak dialog tersimpan, maka saat peramban memuat ulang halaman tersebut dia akan secara otomatis membaca kuki terkait yang telah tersimpan kemudian memutuskan untuk melakukan sesuatu terhadap data yang berhasil dibaca tersebut.

JavaScript Cookie

Berikut ini adalah fungsi JavaScript Cookie yang Saya dapatkan dari QuirksMode:

function createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    } else {
        var expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}

Unduh/Pakai URL Ini

Hanya ada tiga fungsi yaitu createCookie(name, value, days), readCookie(name) dan eraseCookie(name).

createCookie(name, value, days)

createCookie digunakan untuk mencipatkan kuki bersamaan saat sebuah perintah dikerjakan (dalam demo kotak dialog, kuki dibuat saat tombol [×] diklik):

$('a.close').click(function() {
    $('#dialog').fadeOut();
    createCookie("hideDialog", "hide", 7000); // Membuat kuki...
});

hideDialog adalah nama kuki, hide adalah nilai kuki dan 7000 adalah masa kadaluarsa. Dalam fungsi di atas, kuki akan kadaluarsa setelah 7000 hari.

Nilai kuki sebenarnya bisa diabaikan dengan menuliskan nilai berupa null, jika yang kita inginkan hanya mengingat sesi yang terjadi. Tapi jika kuki yang akan kita tampilkan/tugaskan lebih spesifik (nama orang misalnya) maka nilai kuki akan bermanfaat. Sebagai contoh, jika peramban Anda telah menyimpan kuki yang diciptakan dari ini:

createCookie("Nama", "Taufik Nurrohman", 30);

Maka Anda bisa menampilkan nilai kuki tersebut dengan menuliskan ini:

if(readCookie("Nama")) {
    alert(readCookie("Nama"));
}

Kode di atas akan menampilkan kotak pesan peringatan bertuliskan Taufik Nurrohman.

readCookie(name)

Anda sudah mengeklik tombol penutup kotak dialog. Kuki hideDialog sudah tersimpan. Tugas selanjutnya hanyalah menciptakan kondisi untuk memerintahkan peramban melakukan sesuatu saat kuki hideDialog terbaca. Ini bisa dilakukan dengan menuliskan fungsi readCookie dalam kondisi:

if(readCookie("hideDialog")) {
    $('#dialog').remove(); // Hilangkan kotak dialog saat kuki 'hideDialog' terbaca
}

Kode di atas Saya rasa cukup jelas. Saat kuki hideDialog terbaca maka kotak dialog akan dihilangkan. Itulah sebabnya kenapa kotak dialog hanya tampil sekali saja.

eraseCookie(name)

eraseCookie tidak memiliki keistimewaan apapun. Ini hanyalah fungsi sederhana untuk menghapus kuki melalui dokumen HTML:

<button onclick='eraseCookie("hideDialog");'>Hapus Kuki</button>

Tombol di atas akan menghapus kuki penutupan kotak dialog saat diklik. Hal ini tidak jauh berbeda seperti halnya saat kita menghapus kuki secara manual melalui histori peramban:

Menghapus kuki melalui histori peramban
Menghapus kuki melalui histori peramban

Kode Lengkap

jQuery

$(function() {

    // Tampilkan kotak dialog saat halaman telah termuat
    $(window).load(function() {
        $('#dialog').animate({top:($(window).height()/2)-20}, 400, "swing");
    });

    // Saat tombol tutup diklik, sembunyikan kotak dialog dengan efek .fedeOut()
    // dan buat kuki dengan nama "hideDialog" dengan waktu kadaluarsa 7000 hari
    $('a.close').click(function() {
        $(this).parent().fadeOut('fast');
        createCookie("hideDialog", "hide", 7000);
        return false;
    });

    // Digunakan saat kuki sudah tercipta
    // Saat kuki "hideDialog" terbaca, singkirkan kotak dialog
    if(readCookie("hideDialog")) {
        $('#dialog').remove();
    }

});

HTML

<div id='dialog'>
    Lorem ipsum dolor sit amet.
    <a class='close' href='#'>&#215;</a>
</div>

CSS

#dialog {
  background-color:#ffa500;
  border:5px solid #222;
  box-shadow:0px 1px 3px black;
  position:absolute;
  top:-100px;
  left:50%;
  z-index:999;
  width:260px;
  height:140px;
  margin:-70px 0px 0px -150px;
  padding:15px;
  color:white;
}

a.close {
  color:white;
  font:bold 16px Arial,Sans-Serif;
  text-decoration:none;
  position:absolute;
  top:10px;
  right:14px;
}

Labels: , ,

20 Comments:

At Tuesday, June 5, 2012 at 1:55:00 PM GMT+7, Blogger Unknown said...

Ini mas yang saya maksud dulu, ketika sebuah kotak dialog (fanpage facebook like, subscribe dsb) meuncul hanya saat pengunjung membuka blog, dan tidak akan muncul lagi ketika pengunjung pindah halaman.

 
At Thursday, June 7, 2012 at 9:50:00 PM GMT+7, Blogger Unknown said...

tapi kok nggak jalan ya? :)

 
At Friday, June 8, 2012 at 3:08:00 PM GMT+7, Blogger Taufik Nurrohman said...

@Miftah Rahman JavaScript cookie-nya sudah dipasang? Kode yang Saya tuliskan pertama kali, harus dipasang dulu sebelum kode kesimpulan di bawahnya.

 
At Friday, August 31, 2012 at 11:31:00 PM GMT+7, Blogger Klik Template said...

Maaf sbelumnya bang taufik, ini kunjungan awwal di blog anda.

Apa kegunaan jika javascript ini kita massukkan dalam javascript yg kita passang diblog, dan cara mengatasinya bagaimana?

Trims atas jawabannya.... :-bd :-bd :-bd

 
At Saturday, September 1, 2012 at 5:33:00 PM GMT+7, Blogger Taufik Nurrohman said...

Keuntungannya tidak ada. Kalau JavaScript ini dipasang tapi fungsinya tidak dimanfaatkan, hasilnya tidak akan memberikan efek apa-apa.

 
At Sunday, November 4, 2012 at 3:01:00 AM GMT+7, Blogger yudhaardiansyah said...

kita juga punya nih artikel mengenai java script, berikut linknya semoga bermanfaat ya :D
http://repository.gunadarma.ac.id/bitstream/123456789/2371/1/02-02-011.pdf

 
At Tuesday, December 25, 2012 at 10:38:00 PM GMT+7, Blogger al said...

sangat manfaat sekali klw buat warning adult content

terimakasih buat scriptnya mas taufiq,,sudah di terapkan di blog dewasa saya :D

cuma ada pertanyaan nih mas,,,
bisa nga klw yg load pertama kali itu warningnya,,,jadi tidak usah tunggu load blog selesai, takut keintip isinya klw yg klik bukan semestinya

ini contohnya mas _contoh008.blogspot . com

 
At Thursday, December 27, 2012 at 6:51:00 PM GMT+7, Blogger Taufik Nurrohman said...

Buang saja kode $(window).load(function() { ... }); dari lingkup animasi kotak dialog:

$(function() {
$('#dialog').animate({top:($(window).height()/2)-20}, 400, "swing");
$('a.close').click(function() {
$(this).parent().fadeOut('fast');
createCookie("hideDialog", "hide", 7000);
return false;
});
if(readCookie("hideDialog")) {
$('#dialog').remove();
}
});

 
At Monday, December 31, 2012 at 6:52:00 PM GMT+7, Blogger al said...

makasi udah bisa master,,udah aman deh sekarang :D

 
At Monday, February 4, 2013 at 11:16:00 AM GMT+7, Blogger Blog Santa Mars said...

bos, ajarin aku cookie donk bos., dari kemarin mau nyimpan background lewat cookie gak bisa-bisa.. :D

 
At Monday, February 4, 2013 at 12:10:00 PM GMT+7, Blogger Taufik Nurrohman said...

/2012/05/style-switcher-blog-dengan-cookies.html

 
At Monday, February 4, 2013 at 1:22:00 PM GMT+7, Blogger Blog Santa Mars said...

thanks gan, urlnya cocok dengan apa yang saya cari. :-bd
benar-benar mantap mas taufik :D

 
At Saturday, February 16, 2013 at 10:32:00 PM GMT+7, Blogger Unknown said...

Mas ini kan kode kalau diterapkan dialog itu akan muncul satu kali saja, nah bagaimana kalau kita ingin 2 atau berapa kali dialog ini muncul.

 
At Sunday, February 17, 2013 at 7:17:00 PM GMT+7, Blogger Taufik Nurrohman said...

Belajar dasarnya dulu...

 
At Sunday, October 6, 2013 at 9:52:00 AM GMT+7, Blogger you said...

dasar-dasar belajar javascript itu yang pertama kali harus dimulai dari mana mas (bagian apa yang wajib difahami terlebih dahulu)?

 
At Sunday, October 6, 2013 at 10:07:00 AM GMT+7, Blogger Taufik Nurrohman said...

Yang jelas harus tahu dulu mengenai cara meletakkan kode JavaScript pada tempat yang benar. Ini berlaku juga untuk memahami materi koding yang lain. Saya sering sekali mendapat pertanyaan-pertanyaan yang seragam mengenai mengapa skrip ini tidak bekerja, mengapa skrip itu tidak bekerja… padahal masalahnya biasanya cuma soal peletakkan kode yang tidak benar. Pelajari di sini ⇒ Memahami `DOMContentLoaded`

Setelah itu, kita bisa memulai untuk memahami apa itu variabel ⇒ JavaScript Variabel

 
At Wednesday, September 10, 2014 at 4:47:00 PM GMT+7, Blogger you said...

Oo ternyata ada disini.. maaf mas ga lihat sitemapnya... terima kasih atas bantuannya

 
At Monday, May 9, 2016 at 10:05:00 AM GMT+7, Blogger Unknown said...

kalo untuk membuat cookie secara global gimana mas?
misalnya gini:
1. tipe gambar create cookies 3 hari
2. tipe css dan js create cookies 7 hari
hehe mudah2an bisa dimengerti

 
At Friday, December 8, 2017 at 1:36:00 AM GMT+7, Blogger you said...

Kalo digabungkan dengan ini gimana mas.. Elemen class .suka hanya terpanggil sekali dalam sehari $(document).ready(function(){
setTimeout(function(){
$('#pop').addClass('suka')
},10000);

setTimeout(function(){
$('#pop').removeClass('suka');
},15000);

});

 
At Tuesday, November 20, 2018 at 3:48:00 AM GMT+7, Blogger Sekedus said...

Sangat bermanfaat :bd, sama seperti di [url=https://stackoverflow.com/a/4825695/7598333]stackoverflow[/url]
Referensi dari [url=https://www.w3schools.com/js/js_cookies.asp]w3schools[/url]

 

Post a Comment

<< Home