Pendahuluan Sesi
Sesi mengacu pada proses interaksi antara pengguna yang menggunakan proses browser yang sama dan aplikasi web selama periode waktu tertentu.
Sesi biasanya digunakan untuk melacak status pengguna dan menyimpan informasi pengguna dalam proses browser ini.
Ketika pengguna menutup browser, sesi sebelumnya tidak dapat diperoleh lagi (kasus di mana maksimal cookie adalah -1). Buka browser baru lagi dan sesi baru akan dimulai.
kelas javax.servlet.http.httpsession. Setiap httpsession mewakili sesi pengguna.
Waktu kedaluwarsa setiap sesi adalah 30 menit secara default.
Ketika browser pertama kali mengakses server, tidak peduli halaman mana yang dikunjungi terlebih dahulu, server akan menetapkan pengidentifikasi sesi yang unik kepada pengguna, yaitu, JSessionId dan kemudian mengembalikannya ke pengguna dalam bentuk cookie.
Gambar berikut adalah header respons (gambar berikut ini didasarkan pada Servlet 3.0, dan tidak ada atribut httponly di Servlet 2.5)
Server membuat sesi untuk setiap pengguna, yaitu objek httpsession, dan menyimpannya di sisi server.
Jadi, ketika pengguna mengakses server lagi, bagaimana server tahu atau pengguna saat ini?
Ketika browser mengakses server lagi, itu akan membawa cookie yang berisi JSessionID untuk mengakses server. Server mengembalikan objek httpsession dari pengguna ini berdasarkan ID ini, dan mempertahankan sesi.
(Jadi, apakah mungkin untuk mengimplementasikan sesi yang sama di browser yang berbeda?
Berikut adalah URL tipikal, yang memiliki efek spoofing tertentu dan dapat menerapkan sesi yang sama pada browser yang berbeda:
http: // localhost: 8080/day07_2/cncookieserver; jSessionId = f8692d61cd46d094db7a8fc7387649c)
Hubungan antara browser dan server adalah sebagai berikut:
Httpsession:
Dalam servlet, objek sesi diperoleh melalui metode httpservletrequest.getSession.
Metode berikut dari antarmuka httpsession digunakan untuk berbagi data ke seluruh sesi:
getAttribute ("name") setAttribute ("name", objek); getattributeNames () removeAttribute ("name")Invalidate (); - Metode ini sangat menghapus sesi cache server.
Contoh:
Setattribute di httpsession dari servlet.
Buka servlet lain melalui hyperconnect, atau sebaliknya dan tampilkan informasi melalui getAttribute.
Hubungi GetAttribute di servlet apa pun untuk menampilkan informasi.
Tutup browser ini dan kunjungi kembali servlet yang mendapatkan informasi, dan Anda akan menemukan bahwa tidak ada informasi lagi.
sebagai berikut:
Name string = request.getParameter ("name"); request.setAttribute ("name", "request ---"+name); request.getSession (). setAttribute ("name", "" sesi --- "+name); getServletContext (). setAttribute ("name", "application ---"+name); Pengidentifikasi unik dari sesi ini:
Setiap sesi memiliki pengidentifikasi yang unik, yaitu ID.
Ketika browser memperoleh sesi baru, pengguna dapat mencetak nilai ID melalui session.geid ().
Tanpa menutup browser, melompat pada beberapa halaman, menggunakan sesi yang sama.
menyukai:
request.getSession (). getId ()
Apa yang aman keluar:
Ketika pengguna keluar, ia harus menghapus informasinya dari sesi - yaitu, keluar dengan aman.
Keluar yang aman adalah untuk menghapus informasi yang Anda tinggalkan di server untuk mencegahnya diretas.
Session.invalidate ();
1. Request.getSession (). Invalidate ();
Ini memungkinkan objek yang sesuai di kumpulan sesi dihapus.
2. Sesi.Removeattribute (...)
menyukai:
request.getSession (). RemoveAttribute ("RealCode");
Digunakan untuk menghapus atribut di objek sesi
Lacak sesi dengan menulis ulang URL:
Seperti yang disebutkan sebelumnya, wadah servlet pertama -tama menyimpan sesi pada klien. Kemudian, ketika browser mengeluarkan permintaan HTTP, itu akan berisi sesi ini. Wadah Servlet membaca sessionID dalam permintaan HTTP dan mengeluarkan objek HTTPSession dari wadah berdasarkan sesi ini untuk memfasilitasi pelacakan sesi mana permintaan HTTP milik. Proses ini disebut pelacakan sesi.
Jika browser mendukung cookie, wadah servlet menyimpan sessionID sebagai cookie pada klien browser. Tetapi jika pengguna menonaktifkan cookie untuk alasan keamanan, bagaimana wadah Servlet dapat melacak sesi?
Pertama mari kita nonaktifkan cookie di IE (Catatan: Ini tidak berfungsi untuk beberapa sistem hantu).
IE> Alat> Opsi Internet> Privasi> Lanjutan, dan kemudian nonaktifkan cookie:
Kami dapat menambahkan hyperlink seperti itu ke beranda: (Saya meletakkan kode yang terkait dengan saveServer.java getserver.java logoutservlet.java logoutservlet.java dalam kode berikut)
<h2> menunjukkan teknologi URL penulisan ulang ---- memecahkan masalah bahwa sesi kami tidak valid setelah pengguna menonaktifkan cookie </h2> <form Action = "< %= response.encodeUrl (" SaveServer ") %>" Metode = "POST"> Jenis <input = "Teks" Nama = ""/<br/> <input "<input" Tipe = "Teks" Nama = ""/<br/> <input "<input" Tipe = "Teks" Nama = ""//<br/> <input "Tipe" href = "< %= response.encodeUrl (" getserVlet ") %>"> Menulis ulang data-read-read dalam beberapa kontainer </a> <br/> <a href = "< %= response.encodeUrl (" logoutservlet ") %>"> Penulisan ulang URL-Safe Exit </aTa>Kalimat ini <Form Action = "<%= response.encodeUrl ("/aa ")%>"> dapat mewujudkan fungsi ini
Setelah menonaktifkan cookie di sini, browser masih dapat menerima cookie yang dikirim oleh server, tetapi browser hanya dapat menerimanya dan tidak dapat mengirimnya ke server. Jika cookie tidak dapat dikirim, ia tidak dapat pergi ke kumpulan sesi untuk mendapatkan objek yang sesuai.
Setelah memasuki nilai yang diinginkan dalam formulir, buka hyperlink di GetServlet di bawah ini untuk melihat apakah nilai input masih dapat ditampilkan. Jawabannya adalah ya. Jalur akses di sini serupa
http: // localhost: 8080/day07_2/cncookieservlet; jSessionId = f8692d61cd46d094dbb7a8fc7387649c, jSessionId = f8692d61cd46d094dbb7a. Dengan cara ini, Anda dapat mengaksesnya dengan memasukkan URL ini di browser lain.
Di sini saya ingin menambahkan: (situasi berikut adalah bahwa ketika saya menulis objek httpsession di kumpulan sesi nilai dan nilai jsessionid dari sesi yang sesuai ke dalam cookie. Cookie ini akan menimpa yang dibuat oleh sistem, yang setara dengan diri saya sendiri. Saya akan menetapkan waktu yang ditutup, jika tidak akan ditutup, dan cookie akan mati ketika browser akan ditutup).
Dalam dua kasus apakah cookie dinonaktifkan, ID objek yang baru dibuat di kumpulan sesi berbeda. Yaitu, jika Anda memasukkan nilai nama dalam bentuk saat cookie dinonaktifkan, hasil kueri adalah sebagai berikut:
Dan JSessionID adalah 2BB51EBDEAAF14D19656C71E1B6F9FF6
Kemudian segera ubah ke mode cookie tanpa menonaktifkannya, masukkan nama lain seperti Tom, dan hasil kueri secara alami akan menjadi dua Tom, dan JSessionid adalah
203F9E4DB5D874476B81DAF350661B6A, yang berbeda dari menonaktifkan, yang membuat hasil berikut muncul.
Kemudian pada saat ini kami menutup browser, masukkan browser lagi, dan lihat hasil akses tanpa menonaktifkan mode cookie, sebagai berikut:
Saya akan memposting kode utama di bawah ini:
Saveserver.java
paket cn.hncu.servlets.Session; impor java.io.ioException; impor java.io.printwriter; impor javax.servlet.servletException; impor javax.servlet.http.cookie; impor javax.servlet.http.httpservlet; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; Kelas Publik SaveSerVlet memperluas httpservlet {public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {dopost (permintaan, respons); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/html; charset = UTF-8"); Printwriter out = response.getWriter (); request.setcharacterencoding ("UTF-8"); Name string = request.getParameter ("name"); request.setAttribute ("name", "request ---"+name); request.getSession (). setAttribute ("name", "" sesi --- "+name); getServletContext (). setAttribute ("name", "application ---"+name); // Contoh menggabungkan teknologi cookie dan teknologi sesi untuk aplikasi -※ Fungsi: Setelah menutup browser, jika pengguna dapat masuk ke situs ini dalam waktu 10 menit, ia juga dapat mengakses informasi dalam sesi // Tulis cookie dengan kunci "JSessionID" dan nilai sebagai sesiDid ke klien. Cookie c = cookie baru ("JSessionId", request.getSession (). GetId ()); C.Setmaxage (60*10); // Fenomena di atas disebabkan oleh kalimat ini. Tanpa kalimat ini, tidak akan ada fenomena seperti yang disebutkan di atas c.setpath (request.getContextPath ()); response.addcookie (c); out.println ("Simpan dengan sukses ..."); out.flush (); out.close (); }}Getservlet.java
paket cn.hncu.servlets.Session; impor java.io.ioException; impor java.io.printwriter; impor javax.servlet.servletException; impor javax.servlet.http.httpservlet; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; Kelas publik GetServlet memperluas httpservlet {public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/html; charset = UTF-8"); Printwriter out = response.getWriter (); out.println ("<! Doctype html public/"-// w3c // dtd html 4.01 transisi // en/">"); out.println ("<Html>"); out.println ("<head> <title> a servlet </iteme> </head>"); out.println ("<body>"); String reqname = (string) request.getAttribute ("name"); String sename = (string) request.getSession (). GetAttribute ("name"); String appname = (string) getServerContext (). GetAttribute ("name"); out.println (reqname+"<br/>"); out.println (sename+"<br/>"); out.println (AppName+"<br/>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}LogoutServlet.java
paket cn.hncu.servlets.Session; impor java.io.ioException; impor java.io.printwriter; impor javax.servlet.servletException; impor javax.servlet.http.httpservlet; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; LogoutServlet kelas publik memperluas httpservlet {public void doGet (httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Text/html; charset = UTF-8"); Printwriter out = response.getWriter (); // Exit yang aman --- selama objek sesi tidak valid. GetSession (). Invalidate (); out.println ("Exit Safe ..."); }}Di atas adalah manajemen sesi sesi Javaweb yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan. Editor akan membalas Anda tepat waktu!