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:

public void setValue(String newValue)awam String getValue()public void setPath(String uri)awam String getPath()set kekosongan awamSecure(bendera boolean)set kekosongan awamKomen(Tujuan rentetan)public String getComment()
Nombor Siri Kaedah & Penerangan
1set kosong awamDomain(Corak rentetan)


Tetapkan nama domain kuki, seperti w3cschool.cc
2public String getDomain()


Dapatkan nama domain kuki, seperti w3cschool.cc
3public void setMaxAge(int expired)


Tetapkan tempoh sah kuki dalam saat Tempoh sah lalai ialah masa kelangsungan sesi semasa
4public int getMaxAge()


Dapatkan tempoh sah kuki, dalam beberapa saat, lalai ialah -1, menunjukkan bahawa kuki akan hidup sehingga penyemak imbas ditutup
5awam String getName()


Mengembalikan nama kuki. Nama tidak boleh diubah suai selepas ia dibuat 6
Tetapkan nilai kuki


7
Dapatkan nilai kuki


8
Tetapkan laluan kuki, yang lalai kepada semua URL dalam direktori halaman semasa, serta semua subdirektori dalam direktori ini


9
Dapatkan laluan kuki


                        10
Nyatakan sama ada kuki perlu disulitkan untuk penghantaran


                  11
Tetapkan ulasan yang menerangkan tujuan kuki. Anotasi akan menjadi sangat berguna apabila penyemak imbas memaparkan kuki kepada pengguna


                     12
Mengembalikan ulasan yang menerangkan tujuan kuki, atau batal jika tiada



Menggunakan JSP untuk menetapkan kuki

Menggunakan 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 demonstrasi

kod 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 Kuki

Untuk 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:

C6A7341F-029A-4244-8B38-BE010E391091.jpg


Memadam Kuki Menggunakan JSP

Memadamkan kuki adalah sangat mudah. Jika anda ingin memadamkan kuki, cuma ikut langkah yang diberikan di bawah:

  • Dapatkan kuki sedia ada dan simpannya dalam objek Kuki.

  • Tetapkan tarikh luput kuki kepada 0.

  • Tambahkan kuki ini kembali pada pengepala respons.


Contoh Demonstrasi

Atur 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:

C6A7341F-029A-4244-8B38-BE010E391091.jpg

Lawati http://localhost:8080/testjsp/cookie.jsp sekali lagi, anda akan mendapat keputusan berikut:

7BF1C669-F7A4-4245-B7B0-B79BBB272604.jpg

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.