Latest web development tutorials

JSP Sesi

HTTP adalah protokol stateless, yang berarti bahwa setiap kali klien mengambil halaman, harus membuka koneksi server yang terpisah, server tidak merekam klien sebelumnya meminta informasi apapun.

Ada tiga cara untuk menjaga sesi klien dan server:


cookies

Jaringan server mungkin menetapkan ID sesi yang unik sebagai cookie untuk mewakili setiap klien untuk mengidentifikasi permintaan berikutnya klien.

Ini mungkin bukan cara yang efisien, karena banyak kali tidak selalu mendukung cookie browser, sehingga kami tidak menyarankan menggunakan metode ini untuk menjaga sesi.


kolom formulir tersembunyi

Sebuah web server dapat mengirim tersembunyi kolom formulir HTML dan ID sesi yang unik, seperti ini:

<input type="hidden" name="sessionid" value="12345">

Catatan ini berarti bahwa ketika formulir dikirimkan, nama dan nilai yang ditentukan akan secara otomatis dimasukkan dalam GET atau POST data. Setiap kali browser mengirimkan permintaan, nilai session_id dapat digunakan untuk menyimpan lintasan browser lain.

Pendekatan ini dapat menjadi cara yang efektif, tetapi tidak menghasilkan acara penyerahan formulir Klik <A href> tab hyperlink, dan kolom formulir karena tersembunyi tidak mendukung generik pelacakan sesi.


URL penulisan ulang

Anda dapat menambahkan beberapa data tambahan di balik setiap URL untuk membedakan sesi, menurut data server dapat dikaitkan sesi identifier.

Sebagai contoh, http: //w3cschool.cc/file.htm; sessionid = 12345, sesi identifier sessionid = 12345, server dapat menggunakan data ini untuk mengidentifikasi klien.

Sebaliknya, menulis ulang URL adalah cara yang lebih baik, bahkan jika browser tidak mendukung cookies juga dapat bekerja, namun kelemahan adalah bahwa Anda harus menentukan ID sesi untuk setiap URL dinamis, bahkan jika itu adalah halaman HTML sederhana.


benda sesi

Selain beberapa metode diatas luar, JSP servlet HttpSession antarmuka memberikan gunakan untuk mengidentifikasi pengguna, untuk menyimpan semua akses pengguna ke informasi.

Secara default, JSP memungkinkan pelacakan sesi, objek HttpSession baru akan secara otomatis untuk klien baru dipakai. pelacakan sesi Larangan perlu eksplisit mematikannya dengan halaman direktif nilai atribut sesi ke false untuk mencapai, sebagai berikut:

<%@ page session="false" %>

JSP engine objek sesi implisit terkena pengembang. Dengan menyediakan objek sesi, pengembang dapat dengan mudah menyimpan atau mengambil data.

Tabel berikut ini berisi beberapa penting objek sesi cara:

SN Metode & deskripsi
1 publik Obyek getAttribute (String nama)

kembali objek sesi objek terikat dengan nama tertentu, atau null jika tidak ada
2 getAttributeNames Pencacahan publik ()

Mengembalikan objek sesi semua nama objek
3 publik getCreationTime panjang ()

Mengembalikan objek sesi dibuat waktu, dalam milidetik, dari 1 Januari 1970 tanggal pagi
4 public String getId ()

Mengembalikan ID objek sesi
5 publik getLastAccessedTime panjang ()

Mengembalikan terakhir kali klien mengunjungi, dalam milidetik, dari 1 Januari 1970 tanggal pagi
6 public int getMaxInactiveInterval ()

Mengembalikan interval waktu maksimum, di detik, kontainer servlet akan tetap sesi terbuka saat ini
7 public void invalidate ()

Sesi pembatalan, unbundling benda terikat sesi
8 public boolean isNew (

Kembali apakah klien baru, atau jika klien menolak untuk bergabung sesi
9 public void removeAttribute (String nama)

Hapus sesi nama objek tertentu
10 public void setAttribute (String nama, Object value)

Untuk menghasilkan sebuah objek dengan nama dan nilai yang ditentukan dan terikat untuk sesi
11 public void setMaxInactiveInterval (int interval)

Untuk menentukan waktu, dalam detik, kontainer servlet akan menjaga sesi berlaku selama periode ini

JSP Sesi Aplikasi

Contoh ini menjelaskan cara menggunakan objek HttpSession untuk mendapatkan waktu penciptaan dan waktu akses terakhir. Kami akan menjadi objek sesi baru untuk objek permintaan terkait, jika objek ini tidak sudah ada.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<%
   // 获取session创建时间
   Date createTime = new Date(session.getCreationTime());
   // 获取最后访问页面的时间
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "再次访问本教程实例";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // 检测网页是否由新的访问用户
   if (session.isNew()){
      title = "访问本教程实例";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } else {
	   visitCount = (Integer)session.getAttribute(visitCountKey);
	   visitCount += 1;
	   userID = (String)session.getAttribute(userIDKey);
	   session.setAttribute(visitCountKey,  visitCount);
   }
%>
<html>
<head>
<title>Session 跟踪</title>
</head>
<body>

<h1>Session 跟踪</h1>

<table border="1" align="center"> 
<tr bgcolor="#949494">
   <th>Session 信息</th>
   <th>值</th>
</tr> 
<tr>
   <td>id</td>
   <td><% out.print( session.getId()); %></td>
</tr> 
<tr>
   <td>创建时间</td>
   <td><% out.print(createTime); %></td>
</tr> 
<tr>
   <td>最后访问时间</td>
   <td><% out.print(lastAccessTime); %></td>
</tr> 
<tr>
   <td>用户 ID</td>
   <td><% out.print(userID); %></td>
</tr> 
<tr>
   <td>访问次数</td>
   <td><% out.print(visitCount); %></td>
</tr> 
</table> 
</body>
</html>

Cobalah untuk akses http: // localhost: 8080 / testjsp / main.jsp, pertama kali dijalankan akan mendapatkan hasil sebagai berikut:

Mengunjungi lagi, kita akan mendapatkan hasil sebagai berikut:


Hapus Session data

Ketika selesai memproses data sesi pengguna, Anda memiliki pilihan berikut:

  • Hapus properti tertentu:

    Panggil (String nama) Metode public void removeAttribute untuk menghapus properti yang ditentukan.

  • Untuk menghapus seluruh percakapan:

    Memanggil metode public void invalidate () untuk membuat seluruh sesi tidak valid.

  • Pengaturan Sesi Durasi:

    Memanggil metode public void setMaxInactiveInterval (int interval) untuk mengatur batas waktu sesi.

  • Masuk Pengguna:

    versi Servlet2.4 didukung dari server, Anda dapat menghubungi () metode logout untuk keluar pengguna dan semua sesi terkait tidak valid.

  • Web.xml file konfigurasi:

    Jika Anda menggunakan Tomcat, Anda dapat mengkonfigurasi file web.xml sebagai berikut:

  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

Waktu dalam menit, Tomcat timeout default adalah 30 menit.

Servlet dalam metode getMaxInactiveInterval () mengembalikan detik timeout. Jika web.xml dikonfigurasi selama 15 menit, metode kemudian getMaxInactiveInterval () akan kembali 900.