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