Rumah >Java >javaTutorial >Cara menggunakan kuki dan teknologi sesi dalam Java
Penyelesaian kepada protokol tanpa kewarganegaraan http:
HTTP ialah protokol tanpa kewarganegaraan. Protokol tanpa kewarganegaraan tidak memerlukan pelayan untuk mengekalkan maklumat atau menyatakan tentang setiap pengguna merentas berbilang permintaan.
Tetapi sesetengah aplikasi web mungkin perlu menjejaki kemajuan pengguna dari satu halaman ke halaman lain, contohnya, apabila pelayan web diperlukan untuk menyesuaikan kandungan halaman web untuk pengguna. Penyelesaian untuk situasi ini termasuk:
Penggunaan kuki HTTP.
Sesi sebelah pelayan.
Pembolehubah tersembunyi (apabila halaman semasa mengandungi borang)
Penulisan semula URL menggunakan parameter berkod URI, contohnya, /index.php ? session_id=some_unique_session_code.
Sebab untuk menjadikan protokol tanpa kewarganegaraan adalah kerana pelayan tidak perlu menjejaki status berbilang permintaan, bukannya ia tidak boleh berbuat demikian jika ia mahu. Ini memudahkan kontrak antara pelanggan dan pelayan dan dalam banyak kes (seperti menyampaikan data statik melalui CDN) meminimumkan jumlah data yang perlu dipindahkan. Jika pelayan diperlukan untuk mengekalkan keadaan akses pelanggan, struktur untuk membuat dan membalas permintaan akan menjadi lebih kompleks. Malah, kesederhanaan model adalah salah satu ciri terbesarnya.
Kuki ialah teknologi sesi yang dicipta dan diselenggara pada pelayan tetapi disimpan di bahagian pelayar
Senario aplikasi kuki: ingat nama pengguna dan kata laluan, tidak perlu log masuk selama tujuh hari
//创建cookie Cookie cookie = new Cookie("username", "admin"); //将cookie响应到浏览器 response.addCookie(cookie);
Cara kuki diwakili dalam mesej:
Jika kuki dicipta dalam pelayan dan bertindak balas kepada penyemak imbas, ia akan muncul dalam mesej respons: Set-Cookie: username=admin
Selepas itu, setiap kali penyemak imbas menghantar permintaan kepada pelayan, ia akan membawa Kuki ini akan muncul dalam mesej permintaan: Kuki: username=admin
Selepas membalas kuki ke penyemak imbas, ia akan disimpan dalam memori berjalan penyemak imbas Apabila penyemak imbas ditutup, penyemak imbas memori berjalan akan dikeluarkan, jadi kuki akan dikosongkan. Oleh itu, masa kesahan lalai sesi adalah dari masa penyemak imbas dibuka hingga masa penyemak imbas ditutup
//获取浏览器发送请求所携带的所有cookie Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie cookie : cookies) { System.out.println(cookie.getName() + "," + cookie.getValue()); } }
/*Cookie cookie = new Cookie("username", "root"); response.addCookie(cookie);*/ Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie cookie : cookies) { if(cookie.getName().equals("username")){ cookie.setValue("zhangsan"); response.addCookie(cookie); } } }
a> Apabila masa kesahihan yang ditetapkan ialah integer negatif , tidak mempunyai kesan, iaitu masa yang sah adalah dari semasa penyemak imbas dibuka hingga apabila penyemak imbas ditutup
b> ialah 0, ini bermakna bahawa kuki akan dipadamkan serta-merta
c> kuki akan dipadamkan secara automatik daripada memori yang sedang berjalan apabila masa yang ditentukan dicapai
Jika masa yang sah lebih daripada satu sesi, apabila penyemak imbas ditutup, ia akan Menyimpan data dalam kuki ke cakera. Apabila penyemak imbas dibuka semula, data dalam cakera akan dimuatkan semula ke dalam memori yang sedang berjalan
6. Tetapkan laluan berkesan kuki
setPath();
Apabila kuki dibuat dan bertindak balas kepada penyemak imbas, kuki dengan laluan yang sah ditetapkan Kuki hanya akan dibawa apabila mengakses laluan yang ditentukan
Sesi ialah teknologi sesi yang dicipta dan diselenggara dalam pelayan dan disimpan di bahagian pelayan
Senario aplikasi sesi: merekod status log masuk pengguna
Apabila request.getSession( diakses buat kali pertama dalam sesi ini ) apabila mendapatkan objek sesi, kuki dengan kunci JSESSIONID akan muncul dalam mesej respons
Setiap kali permintaan dihantar ke pelayan melalui penyemak imbas, kuki dengan JSESSIONID ini akan dibawa
<.> walaupun semasa mengakses pelayan, gunakan request.getSession() untuk mendapatkan semula objek sesi Selagi terdapat kuki JSESSIONID dalam mesej permintaan, kuki ini tidak akan muncul lagi dalam mesej responsSoalan:
Apakah prinsip sesi?
Apakah hubungan antara sesi dan kuki?
Mengapa sesi yang sama diperolehi dalam satu sesi?
Apabila sesi diperoleh melalui request.getSession(), kuki dengan kunci JSESSIONID dalam mesej permintaan akan diperoleh
Jika tiada kunci dalam mesej permintaan Kuki JSESSIONID menunjukkan bahawa sesi semasa baru sahaja bermula dan merupakan kali pertama untuk mendapatkan objek sesi dalam sesi semasa. Pada masa ini, objek sesi akan dibuat di dalam pelayan, dan kuki akan dibuat dengan kunci JSESSIONID dan nilai urutan rawak UUID kemudian objek sesi yang dibuat akan disimpan dalam koleksi peta yang diselenggara oleh pelayan, dengan urutan rawak UUID sebagai kunci , menggunakan objek sesi sebagai nilai, dan akhirnya membalas kuki JSESSIONID kepada penyemak imbas
若请求报文中存在键为JSESSIONID的cookie,此时获取该cookie的值,即UUID随机序列,以UUID随机序列为键,从服务器所维护的map集合中就可以获取唯一的session对象
void setAttribute(String name, Object value);
Object getAttribute(String name);
void removeAttribute(String name);
session的时效指在指定时间内,若没有对session进行任何的操作,此时session会自动失效
a>通过web.xml设置,单位是分钟
<session-config> <session-timeout>30</session-timeout> </session-config>
b>通过session.setMaxInactiveInterval()设置,单位是秒
session.setMaxInactiveInterval(1800);
session.invalidate()
session的钝化指服务器关闭,但是浏览器没有关闭,此时session中的数据会被序列化到磁盘上
session的活化指服务器启动,并且浏览器仍然没有关闭,此时会将序列化到磁盘上的数据重新加载到内存中
注意:若session中存储的是实体类对象,此时若要钝化,则该实体类和该实体类的成员变量也都要实现序列化的接口
1、cookie存储在浏览器端,session存储在服务器端,因此cookie相对而言不安全
2、cookie只能存储字符串类型的键值对,session可以存储任意类型的数据,因此若存储相同的数据,cookie可能会产生大量的cookie
3、由于每次浏览器发送请求都会携带cookie,若有大量的cookie,就会造成网络负担
Atas ialah kandungan terperinci Cara menggunakan kuki dan teknologi sesi dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!