Servlets - Penanganan Cookies
Cookies adalah file teks yang disimpan di komputer klien dan disimpan untuk berbagai tujuan pelacakan informasi. Java Servlets mendukung cookie HTTP secara transparan.
Ada tiga langkah yang terlibat dalam mengidentifikasi pengguna yang kembali -
Skrip server mengirimkan sekumpulan cookie ke browser. Misalnya nama, usia, atau nomor identifikasi dll.
Browser menyimpan informasi ini di komputer lokal untuk digunakan di masa mendatang.
Ketika lain kali browser mengirimkan permintaan apa pun ke server web, maka ia mengirimkan informasi cookie tersebut ke server dan server menggunakan informasi itu untuk mengidentifikasi pengguna.
Bab ini akan mengajari Anda cara menyetel atau menyetel ulang cookie, cara mengaksesnya, dan cara menghapusnya.
Anatomi Cookie
Cookie biasanya disetel di header HTTP (meskipun JavaScript juga dapat menyetel cookie langsung di browser). Servlet yang menyetel cookie mungkin mengirim header yang terlihat seperti ini -
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT;
path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html
Seperti yang Anda lihat, tajuk Set-Cookie berisi pasangan nilai nama, tanggal GMT, jalur, dan domain. Nama dan nilai akan dienkode URL. Kolom kedaluwarsa adalah instruksi pada browser untuk "melupakan" cookie setelah waktu dan tanggal yang ditentukan.
Jika browser dikonfigurasi untuk menyimpan cookie, maka informasi ini akan disimpan hingga tanggal kedaluwarsa. Jika pengguna mengarahkan browser ke halaman mana pun yang cocok dengan jalur dan domain cookie, ia akan mengirim ulang cookie ke server. Header browser mungkin terlihat seperti ini -
GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz
Sebuah servlet kemudian akan memiliki akses ke cookie melalui metode permintaan request.getCookies () yang mengembalikan larik objek Cookie .
Metode Cookie Servlet
Berikut ini adalah daftar metode berguna yang dapat Anda gunakan saat memanipulasi cookie di servlet.
Sr.No. | Metode & Deskripsi |
---|---|
1 | public void setDomain(String pattern) Metode ini menyetel domain tempat cookie diterapkan, misalnya tutorialspoint.com. |
2 | public String getDomain() Metode ini mendapatkan domain tempat cookie diterapkan, misalnya tutorialspoint.com. |
3 | public void setMaxAge(int expiry) Metode ini menetapkan berapa lama waktu (dalam detik) harus berlalu sebelum cookie kedaluwarsa. Jika Anda tidak menyetel ini, cookie hanya akan bertahan untuk sesi saat ini. |
4 | public int getMaxAge() Metode ini mengembalikan usia maksimum cookie, ditentukan dalam hitungan detik, Secara default, -1 menunjukkan cookie akan bertahan hingga browser ditutup. |
5 | public String getName() Metode ini mengembalikan nama cookie. Nama tidak dapat diubah setelah dibuat. |
6 | public void setValue(String newValue) Metode ini menetapkan nilai yang terkait dengan cookie |
7 | public String getValue() Metode ini mendapatkan nilai yang terkait dengan cookie. |
8 | public void setPath(String uri) Metode ini menetapkan jalur ke mana cookie ini berlaku. Jika Anda tidak menentukan jalur, cookie akan dikembalikan untuk semua URL dalam direktori yang sama dengan halaman saat ini serta semua subdirektori. |
9 | public String getPath() Metode ini mendapatkan jalur ke mana cookie ini berlaku. |
10 | public void setSecure(boolean flag) Metode ini menyetel nilai boolean yang menunjukkan apakah cookie hanya boleh dikirim melalui koneksi terenkripsi (yaitu SSL). |
11 | public void setComment(String purpose) Metode ini menetapkan komentar yang menjelaskan tujuan cookie. Komentar tersebut berguna jika browser menyajikan cookie kepada pengguna. |
12 | public String getComment() Metode ini mengembalikan komentar yang menjelaskan tujuan cookie ini, atau null jika cookie tidak memiliki komentar. |
Mengatur Cookies dengan Servlet
Mengatur cookie dengan servlet melibatkan tiga langkah -
(1) Creating a Cookie object - Anda memanggil konstruktor Cookie dengan nama cookie dan nilai cookie, yang keduanya adalah string.
Cookie cookie = new Cookie("key","value");
Perlu diingat, baik nama maupun nilai tidak boleh mengandung spasi atau salah satu karakter berikut -
[ ] ( ) = , " / ? @ : ;
(2) Setting the maximum age- Anda menggunakan setMaxAge untuk menentukan berapa lama (dalam detik) cookie harus valid. Mengikuti akan menyiapkan cookie selama 24 jam.
cookie.setMaxAge(60 * 60 * 24);
(3) Sending the Cookie into the HTTP response headers - Anda menggunakan response.addCookie untuk menambahkan cookie di header respons HTTP sebagai berikut -
response.addCookie(cookie);
Contoh
Mari kita ubah Contoh Formulir kita untuk mengatur cookie untuk nama depan dan belakang.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class HelloForm extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Create cookies for first and last names.
Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
// Set expiry date after 24 Hrs for both the cookies.
firstName.setMaxAge(60*60*24);
lastName.setMaxAge(60*60*24);
// Add both the cookies in the response header.
response.addCookie( firstName );
response.addCookie( lastName );
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Setting Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head>
<title>" + title + "</title>
</head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>First Name</b>: "
+ request.getParameter("first_name") + "\n" +
" <li><b>Last Name</b>: "
+ request.getParameter("last_name") + "\n" +
"</ul>\n" +
"</body>
</html>"
);
}
}
Kompilasi servlet di atas HelloForm dan buat entri yang sesuai di file web.xml dan terakhir coba ikuti halaman HTML untuk memanggil servlet.
<html>
<body>
<form action = "HelloForm" method = "GET">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
Simpan konten HTML di atas dalam file Hello.htm dan letakkan di direktori <Tomcat-installationdirectory> / webapps / ROOT. Saat Anda mengakses http: // localhost: 8080 / Hello.htm , berikut adalah keluaran aktual dari formulir di atas.
Coba masukkan First Name dan Last Name lalu klik tombol submit. Ini akan menampilkan nama depan dan nama belakang di layar Anda dan pada saat yang sama akan mengatur dua cookie firstName dan lastName yang akan dikirimkan kembali ke server ketika lain kali Anda menekan tombol Kirim.
Bagian selanjutnya akan menjelaskan kepada Anda bagaimana Anda akan mengakses cookie ini kembali di aplikasi web Anda.
Membaca Cookies dengan Servlet
Untuk membaca cookie, Anda perlu membuat array objek javax.servlet.http.Cookie dengan memanggil filegetCookies()metode HttpServletRequest . Kemudian siklus melalui larik, dan gunakan metode getName () dan getValue () untuk mengakses setiap cookie dan nilai terkait.
Contoh
Mari kita membaca cookie yang telah kita atur di contoh sebelumnya -
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class ReadCookies extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with this domain
cookies = request.getCookies();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Reading Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" );
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( ) + " <br/>");
}
} else {
out.println("<h2>No cookies founds</h2>");
}
out.println("</body>");
out.println("</html>");
}
}
Kompilasi servlet di atas ReadCookiesdan buat entri yang sesuai di file web.xml. Jika Anda menetapkan cookie first_name sebagai "John" dan cookie last_name sebagai "Player", maka menjalankan http: // localhost: 8080 / ReadCookies akan menampilkan hasil berikut -
Found Cookies Name and Value
Name : first_name, Value: John
Name : last_name, Value: Player
Hapus Cookie dengan Servlet
Untuk menghapus cookie sangat sederhana. Jika Anda ingin menghapus cookie, Anda hanya perlu mengikuti tiga langkah berikut -
Baca cookie yang sudah ada dan simpan di objek Cookie.
Tetapkan usia cookie sebagai nol menggunakan setMaxAge() metode untuk menghapus cookie yang ada
Tambahkan cookie ini kembali ke header tanggapan.
Contoh
Contoh berikut akan menghapus dan cookie yang ada bernama "first_name" dan ketika Anda menjalankan ReadCookies servlet lain kali akan mengembalikan nilai null untuk first_name.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class DeleteCookies extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with this domain
cookies = request.getCookies();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Delete Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" );
if( cookies != null ) {
out.println("<h2> Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
if((cookie.getName( )).compareTo("first_name") == 0 ) {
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("Deleted cookie : " + cookie.getName( ) + "<br/>");
}
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println("<h2>No cookies founds</h2>");
}
out.println("</body>");
out.println("</html>");
}
}
Kompilasi servlet di atas DeleteCookiesdan buat entri yang sesuai di file web.xml. Sekarang menjalankan http: // localhost: 8080 / DeleteCookies akan menampilkan hasil berikut -
Cookies Name and Value
Deleted cookie : first_name
Name : first_name, Value: John
Name : last_name, Value: Player
Sekarang coba jalankan http: // localhost: 8080 / ReadCookies dan itu hanya akan menampilkan satu cookie sebagai berikut -
Found Cookies Name and Value
Name : last_name, Value: Player
Anda dapat menghapus cookie Anda di Internet Explorer secara manual. Mulailah dari menu Tools dan pilih Internet Options. Untuk menghapus semua cookie, tekan Delete Cookies.