คุกกี้คือไฟล์ข้อความที่จัดเก็บไว้ในคอมพิวเตอร์ไคลเอนต์ และจะบันทึกข้อมูลแทร็กจำนวนมาก จากเทคโนโลยีเซิร์ฟเล็ต JSP สามารถให้การสนับสนุนคุกกี้ HTTP ได้อย่างชัดเจน
โดยทั่วไปมีสามขั้นตอนในการระบุลูกค้าที่กลับมาซื้อซ้ำ:
สคริปต์เซิร์ฟเวอร์ส่งชุดคุกกี้ไปยังเบราว์เซอร์ เช่น ชื่อ อายุ หมายเลขประจำตัวประชาชน เป็นต้น
เบราว์เซอร์จัดเก็บข้อมูลนี้ไว้ในเครื่องคอมพิวเตอร์ในกรณีที่จำเป็น
ครั้งถัดไปที่เบราว์เซอร์ส่งคำขอใดๆ ไปยังเซิร์ฟเวอร์ เบราว์เซอร์จะส่งข้อมูลคุกกี้เหล่านี้ไปยังเซิร์ฟเวอร์ด้วย จากนั้นเซิร์ฟเวอร์จะใช้ข้อมูลนี้เพื่อระบุผู้ใช้หรือทำสิ่งอื่น
ส่วนนี้จะสอนวิธีการตั้งค่าหรือรีเซ็ตคุกกี้ วิธีเข้าถึงคุกกี้ และวิธีลบคุกกี้
โดยทั่วไปคุกกี้จะถูกตั้งค่าในส่วนหัว HTTP (แม้ว่า JavaScript จะสามารถตั้งค่าคุกกี้ได้โดยตรงในเบราว์เซอร์) ใน JSP การตั้งค่าคุกกี้จำเป็นต้องส่งส่วนหัวข้อมูลต่อไปนี้ไปยังเซิร์ฟเวอร์:
HTTP/1.1 200 OKวันที่: วันศุกร์ 04 กุมภาพันธ์ 2000 21:03:38 GMTServer: Apache/1.3.9 (UNIX) PHP/4.0b3Set-Cookie: name=xyz; หมดอายุ=วันศุกร์ 04-Feb-07 22:03: 38 GMT; path=/; โดเมน=tutorialspoint.comการเชื่อมต่อ: closeContent-Type: ข้อความ/html
อย่างที่คุณเห็น ส่วนหัว Set-Cookie ประกอบด้วยคู่คีย์-ค่า เวลา GMT (เวลามาตรฐานกรีนิช) เส้นทาง และชื่อโดเมน คู่คีย์-ค่าจะถูกเข้ารหัสเป็น URL ช่องวันหมดอายุเป็นคำสั่งที่แจ้งให้เบราว์เซอร์ทราบว่าจะสามารถล้างคุกกี้นี้ได้เมื่อถึงเวลาใด
หากเบราว์เซอร์ของคุณได้รับการกำหนดค่าให้จัดเก็บคุกกี้ เบราว์เซอร์จะเก็บข้อมูลนี้ไว้จนกว่าจะหมดอายุ หากหน้าใดที่ผู้ใช้เยี่ยมชมตรงกับเส้นทางและชื่อโดเมนในคุกกี้ เบราว์เซอร์จะส่งคุกกี้กลับไปยังเซิร์ฟเวอร์อีกครั้ง ส่วนหัวทางฝั่งเบราว์เซอร์มีลักษณะดังนี้:
GET / HTTP/1.0การเชื่อมต่อ: Keep-AliveUser-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)โฮสต์: zink.demon.co.uk:1126Accept: image/gif, */*Accept- การเข้ารหัส: gzipAccept-Language: enAccept-Charset: iso-8859-1,*,utf-8Cookie: ชื่อ=xyz
สคริปต์ JSP เข้าถึงคุกกี้เหล่านี้ผ่านเมธอด getCookies() ในออบเจ็กต์คำขอ วิธีนี้จะส่งคืนอาร์เรย์ของออบเจ็กต์คุกกี้
ตารางต่อไปนี้แสดงรายการวิธีการที่ใช้กันทั่วไปในออบเจ็กต์คุกกี้:
หมายเลขซีเรียล | วิธีการ และ คำอธิบาย |
---|---|
1 | โมฆะสาธารณะ setDomain(รูปแบบสตริง) ตั้งชื่อโดเมนของคุกกี้ เช่น w3cschool.cn |
2 | public String getDomain() รับชื่อโดเมนของคุกกี้ เช่น w3cschool.cn |
3 | public void setMaxAge(int expiry) กำหนดระยะเวลาการใช้งานคุกกี้เป็นวินาที |
4 | public int getMaxAge() รับระยะเวลาความถูกต้องของคุกกี้เป็นวินาที โดยค่าเริ่มต้นคือ -1 ซึ่งบ่งชี้ว่าคุกกี้จะคงอยู่จนกว่าเบราว์เซอร์จะปิด |
5 | public String getName() ส่งคืนชื่อของคุกกี้ ไม่สามารถแก้ไขชื่อได้หลังจากสร้างแล้ว |
6 | โมฆะสาธารณะ setValue(String newValue) ตั้งค่าของคุกกี้ |
7 | public String getValue() รับค่าของคุกกี้ |
8 | public void setPath(String uri) ตั้งค่าเส้นทางคุกกี้ ซึ่งเป็นค่าเริ่มต้นสำหรับ URL ทั้งหมดในไดเร็กทอรีหน้าปัจจุบันและไดเร็กทอรีย่อยทั้งหมดในไดเร็กทอรีนี้ |
9 | public String getPath() รับเส้นทางของคุกกี้ |
10 | โมฆะสาธารณะ setSecure (ธงบูลีน) ระบุว่าคุกกี้ควรได้รับการเข้ารหัสสำหรับการส่งข้อมูลหรือไม่ |
11 | โมฆะสาธารณะ setComment(วัตถุประสงค์สตริง) ตั้งค่าความคิดเห็นเพื่ออธิบายวัตถุประสงค์ของคุกกี้ คำอธิบายประกอบอาจมีประโยชน์เมื่อเบราว์เซอร์แสดงคุกกี้แก่ผู้ใช้ |
12 | public String getComment() ส่งคืนความคิดเห็นที่อธิบายวัตถุประสงค์ของคุกกี้ หรือคืนค่าเป็นโมฆะหากไม่มี |
การตั้งค่าคุกกี้โดยใช้ JSP มีสามขั้นตอน:
(1) สร้างออบเจ็กต์คุกกี้: เรียกใช้ตัวสร้างคุกกี้ โดยใช้ชื่อคุกกี้และค่าเป็นพารามิเตอร์ ซึ่งทั้งสองอย่างนี้เป็นสตริง
คุกกี้ คุกกี้ = คุกกี้ใหม่("คีย์", "ค่า");
สิ่งสำคัญคือต้องจำไว้ว่าทั้งชื่อและค่าไม่สามารถมีช่องว่างหรืออักขระต่อไปนี้:
-
(2) กำหนดระยะเวลาที่มีผล: เรียกใช้ฟังก์ชัน setMaxAge() เพื่อระบุว่าคุกกี้ใช้งานได้นานเท่าใด (เป็นวินาที) การดำเนินการต่อไปนี้จะกำหนดระยะเวลาที่ใช้ได้เป็น 24 ชั่วโมง
cookie.setMaxAge(60*60*24);
(3) ส่งคุกกี้ไปยังส่วนหัวการตอบกลับ HTTP: เรียกใช้ฟังก์ชัน response.addCookie() เพื่อเพิ่มคุกกี้ไปที่ส่วนหัวการตอบกลับ HTTP
response.addCookie (คุกกี้);
<% // ตั้งค่าคุกกี้สำหรับ first_name และ Last_name Cookie firstName = new Cookie("first_name", request.getParameter("first_name")); Cookie LastName = new Cookie("last_name",request.getParameter("last_name")); //ตั้งเวลาหมดอายุของคุกกี้เป็น 24 ชั่วโมง firstName.setMaxAge(60*60*24); LastName.setMaxAge(60*60*24); // เพิ่มคุกกี้ลงในส่วนหัวการตอบกลับ response.addCookie( firstName ); head><title>การตั้งค่าคุกกี้</title></head><body><center><h1>การตั้งค่า คุกกี้</h1></center><ul><li><p><b>ชื่อ:</b><%= request.getParameter("first_name")%></p></li>< li><p><b>นามสกุล:</b> <%= request.getParameter("last_name")%></p></li></ul></body></html>
วางไฟล์ด้านบนไว้ในไดเร็กทอรีการติดตั้ง <Tomcat>/webapps/ROOT จากนั้นไปที่ http://localhost:8080/hello.jsp คุณจะได้รับผลลัพธ์ต่อไปนี้:
ลองป้อนชื่อและนามสกุล จากนั้นคลิกปุ่มส่ง มันจะแสดงชื่อและนามสกุลบนหน้าจอของคุณ และตั้งค่าคุกกี้สองตัว ชื่อและนามสกุล ซึ่งจะถูกส่งไปที่เซิร์ฟเวอร์ในครั้งถัดไปที่คุณคลิก ปุ่มส่ง
หากต้องการอ่านคุกกี้ คุณต้องเรียกใช้เมธอด request.getCookies() เพื่อรับอาร์เรย์ของอ็อบเจ็กต์ javax.servlet.http.Cookie จากนั้นวนซ้ำผ่านอาร์เรย์และใช้เมธอด getName() และเมธอด getValue() เพื่อรับคุกกี้แต่ละรายการ . ชื่อและมูลค่า
มาอ่านคุกกี้จากตัวอย่างที่แล้วกัน
<html><head><title>การอ่านคุกกี้</title></head><body><center><h1>การอ่านคุกกี้</h1></center><% คุกกี้ คุกกี้ = null; คุกกี้[] คุกกี้ = null; // รับข้อมูลคุกกี้ซึ่งเป็นคุกกี้อาร์เรย์ = request.getCookies(); if( คุกกี้ != null ){ out.println("<h2> พบชื่อคุกกี้และค่า</h2>"); อินท์ ไอ = 0; i < cookies.length; i++){ cookie = คุกกี้ [i]; out.print("ชื่อ : " + cookie.getName( ) + ", "); out.print("มูลค่า: " + cookie.getValue ( )+" <br/>"); } }else{ out.println("<h2>ไม่พบคุกกี้</h2>"); }%></body></html>
หากคุณตั้งค่าคุกกี้ชื่อเป็น "John" และนามสกุลเป็น "Player" และไปที่ http://localhost:8080/main.jsp คุณจะได้รับผลลัพธ์ต่อไปนี้:
พบชื่อคุกกี้และ ValueName : first_name, Value: John Name : Last_name, Value: Player
การลบคุกกี้นั้นง่ายมาก หากคุณต้องการลบคุกกี้ เพียงทำตามขั้นตอนด้านล่าง:
รับคุกกี้ที่มีอยู่แล้วจัดเก็บไว้ในออบเจ็กต์คุกกี้
ตั้งค่าวันหมดอายุของคุกกี้เป็น 0
เพิ่มคุกกี้นี้กลับไปที่ส่วนหัวการตอบกลับ
โปรแกรมต่อไปนี้จะลบคุกกี้ชื่อ "first_name" ครั้งถัดไปที่คุณเรียกใช้ main.jsp first_name จะเป็นโมฆะ
<html><head><title>การอ่านคุกกี้</title></head><body><center> <h1>การอ่านคุกกี้</h1></center><% คุกกี้ คุกกี้ = null; คุกกี้[] คุกกี้ = null; // รับคุกกี้ภายใต้ชื่อโดเมนปัจจุบันซึ่งเป็นคุกกี้อาร์เรย์ = request.getCookies(); if( คุกกี้ != null ){ out.println("<h2> พบชื่อคุกกี้และค่า</h2> "); สำหรับ (int i = 0; i <cookies.length; i++){ cookie = คุกกี้[i]; if((cookie.getName( )).compareTo("first_name") == 0 ){ cookie.setMaxAge(0); (cookie); out.print("คุกกี้ที่ถูกลบ: " + cookie.getName( ) + "<br/>"); } out.print("ชื่อ : " + cookie.getName( ) + ", "); out.print("Value: " + cookie.getValue( )+" <br/>"); } }else{ out.println( "<h2>ไม่พบคุกกี้</h2>"); ร่างกาย></html>
การเข้าถึงมันจะให้ผลลัพธ์ต่อไปนี้:
ชื่อคุกกี้และ ValueDeleted cookie : first_nameName : first_name, Value: JohnName : Last_name, Value: Player
ไปที่ http://localhost:8080/main.jsp อีกครั้ง แล้วคุณจะได้ผลลัพธ์ดังต่อไปนี้:
พบชื่อคุกกี้และ ValueName : Last_name, Value: Player
คุณยังสามารถลบคุกกี้ได้ด้วยตนเองในเบราว์เซอร์ของคุณ คลิกรายการเมนูเครื่องมือ จากนั้นเลือกตัวเลือกอินเทอร์เน็ต คลิกลบคุกกี้ เพื่อลบคุกกี้ทั้งหมด