JSP - การจัดการคุกกี้
ในบทนี้เราจะพูดถึงการจัดการคุกกี้ใน JSP คุกกี้คือไฟล์ข้อความที่เก็บไว้ในคอมพิวเตอร์ไคลเอนต์และจะถูกเก็บไว้เพื่อวัตถุประสงค์ในการติดตามข้อมูลต่างๆ JSP สนับสนุนคุกกี้ HTTP อย่างโปร่งใสโดยใช้เทคโนโลยี servlet ที่อยู่เบื้องหลัง
มีสามขั้นตอนที่เกี่ยวข้องในการระบุและส่งคืนผู้ใช้ -
สคริปต์เซิร์ฟเวอร์ส่งชุดคุกกี้ไปยังเบราว์เซอร์ ตัวอย่างเช่นชื่ออายุหรือหมายเลขประจำตัวเป็นต้น
เบราว์เซอร์เก็บข้อมูลนี้ไว้ในเครื่องท้องถิ่นเพื่อใช้ในอนาคต
เมื่อครั้งต่อไปที่เบราว์เซอร์ส่งคำขอใด ๆ ไปยังเว็บเซิร์ฟเวอร์ก็จะส่งข้อมูลคุกกี้เหล่านั้นไปยังเซิร์ฟเวอร์และเซิร์ฟเวอร์จะใช้ข้อมูลดังกล่าวเพื่อระบุตัวผู้ใช้หรืออาจเพื่อวัตถุประสงค์อื่นด้วย
บทนี้จะสอนวิธีตั้งค่าหรือรีเซ็ตคุกกี้วิธีเข้าถึงและวิธีลบโดยใช้โปรแกรม JSP
กายวิภาคของคุกกี้
โดยปกติคุกกี้จะถูกตั้งค่าในส่วนหัว HTTP (แม้ว่า JavaScript จะสามารถตั้งค่าคุกกี้ได้โดยตรงบนเบราว์เซอร์ก็ตาม) JSP ที่ตั้งค่าคุกกี้อาจส่งส่วนหัวที่มีลักษณะเช่นนี้ -
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT;
path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html
อย่างที่คุณเห็นไฟล์ Set-Cookie header ประกอบด้วย a name value pair, a GMT date, a path และ a domain. ชื่อและค่าจะถูกเข้ารหัส URL expires ฟิลด์เป็นคำสั่งสำหรับเบราว์เซอร์เพื่อ "forget" คุกกี้หลังจากเวลาและวันที่ที่กำหนด
หากเบราว์เซอร์ได้รับการกำหนดค่าให้จัดเก็บคุกกี้เบราว์เซอร์จะเก็บข้อมูลนี้ไว้จนถึงวันหมดอายุ หากผู้ใช้ชี้เบราว์เซอร์ไปที่หน้าใด ๆ ที่ตรงกับเส้นทางและโดเมนของคุกกี้ผู้ใช้จะส่งคุกกี้ไปยังเซิร์ฟเวอร์อีกครั้ง ส่วนหัวของเบราว์เซอร์อาจมีลักษณะดังนี้ -
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
จากนั้นสคริปต์ JSP จะสามารถเข้าถึงคุกกี้ผ่านวิธีการร้องขอ request.getCookies()ซึ่งส่งคืนอาร์เรย์ของวัตถุคุกกี้
วิธีการคุกกี้ Servlet
ตารางต่อไปนี้แสดงวิธีการที่มีประโยชน์ที่เกี่ยวข้องกับวัตถุคุกกี้ซึ่งคุณสามารถใช้ในขณะที่จัดการคุกกี้ใน JSP -
ส. | วิธีการและคำอธิบาย |
---|---|
1 | public void setDomain(String pattern) วิธีนี้ตั้งค่าโดเมนที่จะใช้คุกกี้ ตัวอย่างเช่น tutorialspoint.com |
2 | public String getDomain() วิธีนี้ได้รับโดเมนที่ใช้คุกกี้ ตัวอย่างเช่น tutorialspoint.com |
3 | public void setMaxAge(int expiry) วิธีนี้จะกำหนดระยะเวลา (เป็นวินาที) ก่อนที่คุกกี้จะหมดอายุ หากคุณไม่ได้ตั้งค่านี้คุกกี้จะคงอยู่ในเซสชันปัจจุบันเท่านั้น |
4 | public int getMaxAge() วิธีนี้จะคืนค่าอายุสูงสุดของคุกกี้ซึ่งระบุเป็นวินาทีโดยค่าเริ่มต้น -1 ระบุว่าคุกกี้จะยังคงอยู่จนกว่าจะปิดเบราว์เซอร์ |
5 | public String getName() วิธีนี้จะส่งคืนชื่อของคุกกี้ ไม่สามารถเปลี่ยนชื่อได้หลังจากสร้างแล้ว |
6 | public void setValue(String newValue) วิธีนี้ตั้งค่าที่เกี่ยวข้องกับคุกกี้ |
7 | public String getValue() วิธีนี้ได้รับค่าที่เกี่ยวข้องกับคุกกี้ |
8 | public void setPath(String uri) วิธีนี้กำหนดเส้นทางที่จะใช้คุกกี้นี้ หากคุณไม่ระบุเส้นทางระบบจะส่งคืนคุกกี้สำหรับ URL ทั้งหมดในไดเรกทอรีเดียวกันกับหน้าปัจจุบันรวมทั้งไดเรกทอรีย่อยทั้งหมด |
9 | public String getPath() วิธีนี้ได้รับเส้นทางที่คุกกี้นี้ใช้ |
10 | public void setSecure(boolean flag) วิธีนี้ตั้งค่าบูลีนที่ระบุว่าควรส่งคุกกี้ผ่านการเชื่อมต่อที่เข้ารหัส (เช่น SSL) หรือไม่ |
11 | public void setComment(String purpose) วิธีนี้ระบุความคิดเห็นที่อธิบายวัตถุประสงค์ของคุกกี้ ความคิดเห็นจะมีประโยชน์หากเบราว์เซอร์แสดงคุกกี้แก่ผู้ใช้ |
12 | public String getComment() วิธีนี้จะส่งกลับความคิดเห็นที่อธิบายวัตถุประสงค์ของคุกกี้นี้หรือเป็นโมฆะหากคุกกี้ไม่มีความคิดเห็น |
การตั้งค่าคุกกี้ด้วย JSP
การตั้งค่าคุกกี้ด้วย JSP มีสามขั้นตอน -
ขั้นตอนที่ 1: การสร้างวัตถุคุกกี้
คุณเรียกตัวสร้างคุกกี้ด้วยชื่อคุกกี้และค่าคุกกี้ซึ่งทั้งสองอย่างนี้เป็นสตริง
Cookie cookie = new Cookie("key","value");
โปรดทราบว่าทั้งชื่อและค่าไม่ควรมีช่องว่างหรืออักขระใด ๆ ต่อไปนี้ -
[ ] ( ) = , " / ? @ : ;
ขั้นตอนที่ 2: ตั้งค่าอายุสูงสุด
คุณใช้ setMaxAgeเพื่อระบุระยะเวลาที่ควรใช้คุกกี้ (เป็นวินาที) รหัสต่อไปนี้จะตั้งค่าคุกกี้เป็นเวลา 24 ชั่วโมง
cookie.setMaxAge(60*60*24);
ขั้นตอนที่ 3: การส่งคุกกี้ไปยังส่วนหัวการตอบกลับ HTTP
คุณใช้ response.addCookie เพื่อเพิ่มคุกกี้ในส่วนหัวการตอบกลับ HTTP ดังต่อไปนี้
response.addCookie(cookie);
ตัวอย่าง
ให้เราแก้ไขตัวอย่างแบบฟอร์มของเราเพื่อตั้งค่าคุกกี้สำหรับชื่อและนามสกุล
<%
// Create cookies for first and last names.
Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
// Set expiry date after 24 Hrs for both the cookies.
firstName.setMaxAge(60*60*24);
lastName.setMaxAge(60*60*24);
// Add both the cookies in the response header.
response.addCookie( firstName );
response.addCookie( lastName );
%>
<html>
<head>
<title>Setting Cookies</title>
</head>
<body>
<center>
<h1>Setting Cookies</h1>
</center>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>
ให้เราใส่รหัสด้านบน main.jsp ไฟล์และใช้ในหน้า HTML ต่อไปนี้ -
<html>
<body>
<form action = "main.jsp" method = "GET">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
เก็บเนื้อหา HTML ข้างต้นไว้ในไฟล์ hello.jsp และใส่ hello.jsp และ main.jsp ใน <Tomcat-installation-directory>/webapps/ROOTไดเรกทอรี เมื่อคุณจะเข้าถึงhttp://localhost:8080/hello.jspนี่คือผลลัพธ์จริงของแบบฟอร์มด้านบน
ลองป้อนชื่อและนามสกุลจากนั้นคลิกปุ่มส่ง ซึ่งจะแสดงชื่อและนามสกุลบนหน้าจอของคุณและจะตั้งค่าคุกกี้สองรายการfirstName และ lastName. คุกกี้เหล่านี้จะถูกส่งกลับไปยังเซิร์ฟเวอร์เมื่อคุณคลิกปุ่มส่งในครั้งถัดไป
ในส่วนถัดไปเราจะอธิบายวิธีการเข้าถึงคุกกี้เหล่านี้ในเว็บแอปพลิเคชันของคุณ
การอ่านคุกกี้กับ JSP
ในการอ่านคุกกี้คุณต้องสร้างอาร์เรย์ของวัตถุjavax.servlet.http.Cookieโดยเรียกไฟล์getCookies( )วิธีการHttpServletRequest จากนั้นวนรอบอาร์เรย์และใช้getName() และ getValue() วิธีการเข้าถึงคุกกี้และมูลค่าที่เกี่ยวข้อง
ตัวอย่าง
ตอนนี้ให้เราอ่านคุกกี้ที่ตั้งไว้ในตัวอย่างก่อนหน้านี้ -
<html>
<head>
<title>Reading Cookies</title>
</head>
<body>
<center>
<h1>Reading Cookies</h1>
</center>
<%
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with the this domain
cookies = request.getCookies();
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println("<h2>No cookies founds</h2>");
}
%>
</body>
</html>
ตอนนี้ให้เราใส่รหัสด้านบน main.jspไฟล์และพยายามเข้าถึง หากคุณตั้งค่าfirst_name cookie เป็น "John" และ last_name cookie เป็น "ผู้เล่น" แล้วทำงาน http://localhost:8080/main.jsp จะแสดงผลลัพธ์ต่อไปนี้ -
Found Cookies Name and Value
Name : first_name, Value: John
Name : last_name, Value: Player
ลบคุกกี้ด้วย JSP
ในการลบคุกกี้นั้นง่ายมาก หากคุณต้องการลบคุกกี้คุณต้องทำตามสามขั้นตอนนี้ -
อ่านคุกกี้ที่มีอยู่แล้วและเก็บไว้ในวัตถุคุกกี้
ตั้งค่าอายุคุกกี้เป็นศูนย์โดยใช้ setMaxAge() วิธีการลบคุกกี้ที่มีอยู่
เพิ่มคุกกี้นี้กลับเข้าไปในส่วนหัวการตอบกลับ
ตัวอย่าง
ตัวอย่างต่อไปนี้จะแสดงวิธีการลบคุกกี้ที่มีอยู่ชื่อ "first_name" และเมื่อคุณรัน main.jsp JSP ในครั้งถัดไปมันจะส่งคืนค่า null สำหรับ first_name
<html>
<head>
<title>Reading Cookies</title>
</head>
<body>
<center>
<h1>Reading Cookies</h1>
</center>
<%
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with the this domain
cookies = request.getCookies();
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
if((cookie.getName( )).compareTo("first_name") == 0 ) {
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("Deleted cookie: " +
cookie.getName( ) + "<br/>");
}
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println(
"<h2>No cookies founds</h2>");
}
%>
</body>
</html>
ตอนนี้ให้เราใส่รหัสด้านบนในไฟล์ main.jspไฟล์และพยายามเข้าถึง มันจะแสดงผลลัพธ์ต่อไปนี้ -
Cookies Name and Value
Deleted cookie : first_name
Name : first_name, Value: John
Name : last_name, Value: Player
ตอนนี้เรียกใช้http: // localhost: 8080 / main.jspอีกครั้งและควรแสดงคุกกี้เพียงรายการเดียวดังนี้ -
Found Cookies Name and Value
Name : last_name, Value: Player
คุณสามารถลบคุกกี้ของคุณใน Internet Explorer ด้วยตนเอง เริ่มที่เมนูเครื่องมือและเลือกตัวเลือกอินเทอร์เน็ต หากต้องการลบคุกกี้ทั้งหมดให้คลิกปุ่ม Delete Cookies