HTTP merupakan protokol stateless, artinya setiap kali klien mengambil halaman web, koneksi server terpisah dibuka, sehingga server tidak mencatat informasi apa pun dari permintaan klien sebelumnya.
Ada tiga cara untuk mempertahankan sesi client-server:
Server web dapat menetapkan ID sesi unik sebagai cookie untuk mewakili setiap klien dan mengidentifikasi permintaan berikutnya dari klien tersebut.
Ini mungkin bukan cara yang efisien, karena sering kali browser belum tentu mendukung cookie, jadi kami tidak menyarankan penggunaan metode ini untuk mempertahankan sesi.
Server web dapat mengirimkan kolom formulir HTML tersembunyi dan ID sesi unik, seperti ini:
<input type="tersembunyi" nama="sessionid" value="12345">
Entri ini berarti ketika formulir dikirimkan, nama dan nilai yang ditentukan secara otomatis akan disertakan dalam data GET atau POST. Setiap kali browser mengirimkan permintaan, nilai session_id dapat digunakan untuk menyimpan jejak browser yang berbeda.
Pendekatan ini mungkin merupakan pendekatan yang efisien, namun mengklik hyperlink dalam tag <A HREF> tidak menghasilkan kejadian pengiriman formulir, sehingga kolom formulir tersembunyi tidak mendukung pelacakan sesi universal.
Anda dapat menambahkan beberapa data tambahan setelah setiap URL untuk membedakan sesi, dan server dapat mengaitkan pengidentifikasi sesi berdasarkan data ini.
Misalnya, http://w3cschool.cn/file.htm;sessionid=12345, pengidentifikasi sesi adalah sessionid=12345, server dapat menggunakan data ini untuk mengidentifikasi klien.
Sebagai perbandingan, menulis ulang URL adalah cara yang lebih baik, dan ini akan berfungsi meskipun browser tidak mendukung cookie, namun kelemahannya adalah Anda harus secara dinamis menentukan ID sesi untuk setiap URL, meskipun itu adalah halaman HTML sederhana.
Selain metode di atas, JSP menggunakan antarmuka HttpSession yang disediakan oleh servlet untuk mengidentifikasi pengguna dan menyimpan semua informasi akses pengguna tersebut.
Secara default, JSP mengizinkan pelacakan sesi, dan objek HttpSession baru akan secara otomatis dibuat untuk klien baru. Menonaktifkan pelacakan sesi memerlukan penonaktifan secara eksplisit, yang dilakukan dengan menyetel nilai atribut session di arahan halaman ke false, sebagai berikut:
<%@ halaman sesi="salah" %>
Mesin JSP memperlihatkan objek sesi yang mendasarinya kepada pengembang. Karena objek sesi disediakan, pengembang dapat dengan mudah menyimpan atau mengambil data.
Tabel berikut mencantumkan beberapa metode penting dari objek sesi:
hal | Metode & Deskripsi |
---|---|
1 | public Object getAttribute(String name) mengembalikan objek yang terikat ke nama yang ditentukan dalam objek sesi, atau null jika tidak ada. |
2 | enumerasi publik getAttributeNames() mengembalikan semua nama objek di objek sesi |
3 | public long getCreationTime() mengembalikan waktu ketika objek sesi dibuat, dalam milidetik, dimulai dari pagi hari tanggal 1 Januari 1970 |
4 | public String getId() mengembalikan ID objek sesi |
5 | public long getLastAccessedTime() mengembalikan waktu akses terakhir klien, dalam milidetik, dimulai dari pagi hari tanggal 1 Januari 1970 |
6 | public int getMaxInactiveInterval() mengembalikan interval waktu maksimum, dalam hitungan detik, di mana container servlet akan menjaga sesi tetap terbuka |
7 | public void invalidate() membatalkan sesi dan melepaskan ikatan objek apa pun yang terikat pada sesi tersebut. |
8 | public boolean isNew( mengembalikan apakah itu klien baru, atau apakah klien menolak untuk bergabung dalam sesi |
9 | public void deleteAttribute(String name) menghapus objek dengan nama yang ditentukan dalam sesi |
10 | public void setAttribute (Nama string, Nilai objek) menggunakan nama dan nilai yang ditentukan untuk menghasilkan objek dan mengikatnya ke sesi |
11 | public void setMaxInactiveInterval(int interval) digunakan untuk menentukan waktu, dalam hitungan detik, di mana container servlet akan menjaga sesi tetap valid. |
Contoh ini menjelaskan cara menggunakan objek HttpSession untuk mendapatkan waktu pembuatan dan waktu akses terakhir. Kami akan mengaitkan objek sesi baru dengan objek permintaan jika belum ada.
<%@ page import="java.io.*,java.util.*" %><% // Dapatkan waktu pembuatan sesi Date createTime = new Date(session.getCreationTime()); halaman terakhir dikunjungi Tanggal lastAccessTime = Tanggal baru(session.getLastAccessedTime()); String title = "Selamat Datang Kembali di situs web saya Integer visitCount = new Integer(0); new String("visitCount"); String userIDKey = new String("userID"); String userID = new String("ABCD"); ){ title = "Selamat datang di situs web saya"; session.setAttribute(userIDKey, userID); session.setAttribute(visitCountKey, visitCount } visitCount = (Bilangan Bulat)session.getAttribute(visitCountKey); visitCount = visitCount + 1; userID = (String)session.getAttribute(userIDKey); </title></head><body><center><h1>Pelacakan Sesi</h1></center><table align="center"> <tr bgcolor="#949494"> <th>Info sesi</th> <th>Nilai</th></tr> <tr> <td>id</td> <td><% out.print( session. getId()); %></td></tr> <tr> <td>Waktu Pembuatan</td> <td><% out.print(createTime); tr> <td>Waktu Akses Terakhir</td> <td><% out.print(lastAccessTime); %></td></tr> <tr> <td>ID Pengguna</td> <td><% out.print(userID); %></td></tr> <tr> <td>Jumlah kunjungan</td> <td><% out.print(visitCount); tr> </tabel> </tubuh></html>
Coba akses http://localhost:8080/main.jsp. Berikut hasil yang akan didapat saat pertama kali dijalankan:
Kunjungi kembali dan Anda akan mendapatkan hasil sebagai berikut:
Setelah memproses data sesi pengguna, Anda memiliki opsi berikut:
Hapus atribut tertentu:
Panggil metode public void deleteAttribute(String name) untuk menghapus atribut yang ditentukan.
Hapus seluruh sesi:
Panggil metode public void invalidate() untuk membatalkan seluruh sesi.
Tetapkan masa berlaku sesi:
Panggil metode public void setMaxInactiveInterval(int interval) untuk mengatur batas waktu sesi.
keluar pengguna:
Server yang mendukung servlet versi 2.4 dapat memanggil metode logout() untuk mengeluarkan pengguna dan membatalkan semua sesi terkait.
Konfigurasikan file web.xml:
Jika Anda menggunakan Tomcat, Anda dapat mengkonfigurasi file web.xml sebagai berikut:
<session-config> <session-timeout>15</session-timeout> </session-config>
Batas waktu dalam hitungan menit, dan batas waktu default di Tomcat adalah 30 menit.
Metode getMaxInactiveInterval() di Servlet mengembalikan batas waktu dalam hitungan detik. Jika 15 menit dikonfigurasi di web.xml, metode getMaxInactiveInterval() akan mengembalikan 900.