Pengendalian kuki JSP
Kuki ialah fail teks yang disimpan pada komputer klien. Kuki itu menyimpan sejumlah besar maklumat trajektori. Berdasarkan teknologi servlet, JSP jelas boleh memberikan sokongan untuk kuki HTTP.
Biasanya terdapat tiga langkah untuk mengenal pasti pelanggan berulang:
Skrip pelayan menghantar satu siri kuki ke penyemak imbas. Seperti nama, umur, nombor ID, dsb.
Penyemak imbas menyimpan maklumat ini secara setempat pada komputer sekiranya ia diperlukan.
Pada kali seterusnya penyemak imbas menghantar sebarang permintaan kepada pelayan, ia juga akan menghantar maklumat kuki ini kepada pelayan, dan kemudian pelayan menggunakan maklumat ini untuk mengenal pasti pengguna atau melakukan perkara lain.
Bahagian ini akan mengajar anda cara menetapkan atau menetapkan semula kuki, cara mengaksesnya dan cara memadamkannya.
Pemprosesan Kuki JSP memerlukan pengekodan dan penyahkodan bahasa Cina, kaedahnya adalah seperti berikut:
String str = java.net.URLEncoder.encode("中文"); //编码 String str = java.net.URLDecoder.decode("编码后的字符串"); // 解码
Analisis Kuki
Kuki biasanya ditetapkan dalam pengepala HTTP (walaupun JavaScript boleh menetapkan kuki terus dalam penyemak imbas). Dalam JSP, menetapkan kuki memerlukan penghantaran pengepala maklumat berikut ke pelayan:
HTTP/1.1 200 OK Date: Fri, 04 Feb 2015 21:03:38 GMT Server: Apache/1.3.9 (UNIX) PHP/4.0b3 Set-Cookie: name=php; expires=Friday, 04-Feb-07 22:03:38 GMT; path=/; domain=php.cn Connection: close Content-Type: text/html
Seperti yang anda lihat, pengepala maklumat Set-Cookie mengandungi pasangan nilai kunci, masa GMT (Greenwich Mean Time), dan laluan. Pasangan nilai kunci akan dikodkan sebagai URL. Medan tarikh luput ialah arahan yang memberitahu penyemak imbas selepas masa ia boleh mengosongkan kuki ini.
Jika penyemak imbas anda dikonfigurasikan untuk menyimpan kuki, ia akan menyimpan maklumat ini sehingga tamat tempoh. Jika mana-mana halaman yang dilawati oleh pengguna sepadan dengan laluan dan nama domain dalam kuki, penyemak imbas akan menghantar semula kuki kembali ke pelayan. Pengepala maklumat di sebelah penyemak imbas kelihatan seperti berikut:
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
Skrip JSP mengakses kuki ini melalui kaedah getCookies() dalam objek permintaan, yang mengembalikan tatasusunan objek Kuki.
Kaedah Kuki Servlet
Jadual berikut menyenaraikan kaedah yang biasa digunakan dalam objek Kuki:
Nombor Siri | Kaedah & Penerangan |
---|---|
1 | set kosong awamDomain(Corak rentetan) |
2 | public String getDomain() |
3 | public void setMaxAge(int expired) |
4 | public int getMaxAge() |
5 | awam String getName() |
Tetapkan nilai kuki | |
Dapatkan nilai kuki | |
Tetapkan laluan kuki, yang lalai kepada semua URL dalam direktori halaman semasa, serta semua subdirektori dalam direktori ini | |
Dapatkan laluan kuki | |
Nyatakan sama ada kuki perlu disulitkan untuk penghantaran | |
Tetapkan ulasan yang menerangkan tujuan kuki. Anotasi akan menjadi sangat berguna apabila penyemak imbas memaparkan kuki kepada pengguna | |
Mengembalikan ulasan yang menerangkan tujuan kuki, atau batal jika tiadaMenggunakan JSP untuk menetapkan kukiMenggunakan JSP untuk menetapkan kuki melibatkan tiga langkah: (1) Cipta objek Kuki: Panggil pembina Kuki , menggunakan nama dan nilai kuki sebagai parameter, kedua-duanya adalah rentetan. Cookie cookie = new Cookie("key","value"); Sila ingat bahawa nama mahupun nilai tidak boleh mengandungi ruang atau aksara berikut: [ ] ( ) = , " / ? @ : ; (2) Tetapkan tempoh sah: Panggil setMaxAge() fungsi untuk menunjukkan kuki Berapa lama (dalam saat) ia sah. Operasi berikut menetapkan tempoh sah kepada 24 jam. cookie.setMaxAge(60*60*24); (3) Hantar kuki ke pengepala respons HTTP: Panggil fungsi response.addCookie() untuk menambah kuki pada pengepala respons HTTP. response.addCookie(cookie); Contoh demonstrasikod fail utama.jsp adalah seperti berikut: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.net.*" %> <% // 编码,解决中文乱码 String str = URLEncoder.encode(request.getParameter("name"),"utf-8"); // 设置 name 和 url cookie Cookie name = new Cookie("name", str); Cookie url = new Cookie("url", request.getParameter("url")); // 设置cookie过期时间为24小时。 name.setMaxAge(60*60*24); url.setMaxAge(60*60*24); // 在响应头部添加cookie response.addCookie( name ); response.addCookie( url ); %> <html> <head> <title>设置 Cookie</title> </head> <body> <h1>设置 Cookie</h1> <ul> <li><p><b>网站名:</b> <%= request.getParameter("name")%> </p></li> <li><p><b>网址:</b> <%= request.getParameter("url")%> </p></li> </ul> </body> </html> Berikut ialah borang HTML ringkas yang menyerahkan data klien ke fail main.jsp , dan tetapkan kuki: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <form action="main.jsp" method=GET> 站点名: <input type="text" name="name"> <br /> 网址: <input type="text" name="url" /> <input type="submit" value="提交" /> </form> </body> </html> Simpan kod HTML di atas ke fail test.htm. Letakkan fail ini dalam direktori WebContent projek jsp semasa (direktori yang sama seperti main.jsp). Serahkan data borang ke fail utama.jsp dengan melawati http://localhost:8080/testjsp/test.html Gif demo adalah seperti berikut: <🎜. > Cuba masukkan "nama tapak" dan "alamat web", dan kemudian klik butang serah, ia akan memaparkan "nama tapak" dan "alamat web" dalam skrin anda, dan tetapkan kedua-dua "nama tapak" dan "web alamat" kuki.Gunakan JSP untuk membaca KukiUntuk membaca kuki, anda perlu memanggil kaedah request.getCookies() untuk mendapatkan tatasusunan objek javax.servlet.http.Cookie Kemudian lelaran melalui tatasusunan ini dan gunakan kaedah getName() dan kaedah getValue() untuk mendapatkan nama dan nilai setiap kuki. <h3 contoh tunjuk cara< h3=""> Mari kami membaca kuki dalam contoh sebelumnya Berikut ialah kod fail cookie.jsp:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.net.*" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>获取 Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // 获取cookies的数据,是一个数组 cookies = request.getCookies(); if( cookies != null ){ out.println("<h2> 查找 Cookie 名与值</h2>"); for (int i = 0; i < cookies.length; i++){ cookie = cookies[i]; out.print("参数名 : " + cookie.getName()); out.print("<br>"); out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>"); out.print("------------------------------------<br>"); } }else{ out.println("<h2>没有发现 Cookie</h2>"); } %> </body> </html>Selepas akses penyemak imbas , hasil output ialah: Memadam Kuki Menggunakan JSP Memadamkan kuki adalah sangat mudah. Jika anda ingin memadamkan kuki, cuma ikut langkah yang diberikan di bawah:
Contoh DemonstrasiAtur cara berikut memadamkan kuki bernama "nama". Apabila anda menjalankan cookie.jsp untuk kali kedua, nama akan menjadi batal. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.net.*" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>获取 Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // 获取当前域名下的cookies,是一个数组 cookies = request.getCookies(); if( cookies != null ){ out.println("<h2> 查找 Cookie 名与值</h2>"); for (int i = 0; i < cookies.length; i++){ cookie = cookies[i]; if((cookie.getName( )).compareTo("name") == 0 ){ cookie.setMaxAge(0); response.addCookie(cookie); out.print("删除 Cookie: " + cookie.getName( ) + "<br/>"); } out.print("参数名 : " + cookie.getName()); out.print("<br>"); out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>"); out.print("------------------------------------<br>"); } }else{ out.println("<h2>没有发现 Cookie</h2>"); } %> </body> </html>diakses melalui penyemak imbas, hasil output ialah: Lawati http://localhost:8080/testjsp/cookie.jsp sekali lagi, anda akan mendapat keputusan berikut:
Anda dapat melihat bahawa kuki bernama width="70%" "nama" telah hilang. Anda juga boleh memadamkan kuki secara manual dalam penyemak imbas anda. Dalam pelayar IE, anda boleh memadam semua kuki dengan mengklik item menu Alat, kemudian memilih Pilihan Internet dan mengklik Padam Kuki. |