JSP เซสชัน
HTTP เป็นโปรโตคอลไร้สัญชาติซึ่งหมายความว่าทุกครั้งที่ลูกค้าดึงหน้าต้องเปิดการเชื่อมต่อเซิร์ฟเวอร์ที่แยกจากเซิร์ฟเวอร์ไม่บันทึกลูกค้าก่อนหน้านี้ขอให้ข้อมูลใด ๆ
มีสามวิธีที่จะทำให้ลูกค้าและเซิร์ฟเวอร์การประชุมมีดังนี้:
คุ้กกี้
เซิร์ฟเวอร์เครือข่ายอาจกำหนด ID เซสชั่นที่ไม่ซ้ำกันเป็นคุกกี้เพื่อเป็นตัวแทนของลูกค้าแต่ละรายเพื่อแจ้งคำขอต่อไปของลูกค้า
นี้อาจไม่เป็นวิธีที่มีประสิทธิภาพเพราะหลายครั้งที่ไม่จำเป็นต้องสนับสนุนคุกกี้เบราว์เซอร์ดังนั้นเราจึงไม่แนะนำให้ใช้วิธีนี้ในการรักษาเซสชั่น
เขตข้อมูลฟอร์มที่ซ่อนอยู่
เว็บเซิร์ฟเวอร์สามารถส่งเขตข้อมูลฟอร์ม HTML ที่ซ่อนอยู่และรหัสเซสชั่นที่ไม่ซ้ำกันเช่นนี้
<input type="hidden" name="sessionid" value="12345">
รายการนี้หมายความว่าเมื่อส่งแบบฟอร์มชื่อที่ระบุและความคุ้มค่าจะถูกรวมโดยอัตโนมัติใน GET หรือโพสต์ข้อมูล เมื่อใดก็ตามที่เบราว์เซอร์ส่งการร้องขอค่า session_id สามารถใช้ในการบันทึกวิถีเบราว์เซอร์ที่แตกต่างกัน
วิธีการนี้อาจจะเป็นวิธีที่มีประสิทธิภาพ แต่ไม่ก่อให้เกิดเหตุการณ์การส่งแบบฟอร์มคลิก <a HREF> แท็บเชื่อมโยงหลายมิติและดังนั้นจึงซ่อนเขตข้อมูลฟอร์มไม่สนับสนุนการติดตามเซสชั่นทั่วไป
URL เขียนใหม่
คุณสามารถเพิ่มข้อมูลพิเศษบางอย่างที่อยู่เบื้องหลังแต่ละ URL ที่จะแยกแยะเซสชั่นตามข้อมูลเซิร์ฟเวอร์สามารถเชื่อมโยงตัวระบุเซสชั่น
ตัวอย่างเช่น http: //w3cschool.cc/file.htm; sessionid = 12345 ระบุเซสชั่น sessionid = 12345 เซิร์ฟเวอร์สามารถใช้ข้อมูลนี้เพื่อระบุตัวตนของลูกค้า
ในทางตรงกันข้าม URL เขียนใหม่เป็นวิธีที่ดีกว่าแม้ว่าเบราว์เซอร์ไม่สนับสนุนคุกกี้ยังสามารถทำงานได้ แต่ข้อเสียเปรียบคือการที่คุณจะต้องระบุหมายเลขเซสชั่นสำหรับ URL แบบไดนามิกแต่ละแม้ว่าจะเป็นหน้า HTML ง่ายๆ
วัตถุเซสชั่น
นอกเหนือไปจากวิธีการต่างๆดังกล่าวข้างต้นนอก, JSP อินเตอร์เฟซเซิร์ฟเล็ต HttpSession ให้ใช้เพื่อระบุผู้ใช้ในการจัดเก็บทั้งหมดเข้าถึงของผู้ใช้ข้อมูล
โดยค่าเริ่มต้น JSP ช่วยให้การติดตามเซสชั่นวัตถุ HttpSession ใหม่จะโดยอัตโนมัติสำหรับลูกค้าใหม่อินสแตนซ์ ติดตามเซสชั่นห้ามความต้องการอย่างชัดเจนปิดโดยคำสั่งหน้าเซสชั่นค่าแอตทริบิวต์เป็นเท็จเพื่อให้บรรลุดังต่อไปนี้:
<%@ page session="false" %>
เครื่องยนต์ JSP วัตถุสมัยนัยสัมผัสกับนักพัฒนา โดยการให้วัตถุสมัยนักพัฒนาสามารถจัดเก็บหรือเรียกข้อมูล
ตารางต่อไปนี้แสดงบางส่วนที่สำคัญวัตถุวิธีเซสชั่น:
SN | วิธีการและคำอธิบาย |
---|---|
1 | getAttribute วัตถุสาธารณะ (ชื่อ String) กลับวัตถุสมัยวัตถุที่ถูกผูกไว้กับชื่อที่ระบุหรือ NULL ถ้าไม่มีอยู่ |
2 | getAttributeNames การแจงนับ (มหาชน) ส่งคืนวัตถุเซสชั่นชื่อวัตถุทั้งหมด |
3 | getCreationTime ยาว (มหาชน) ส่งคืนวัตถุเซสชั่นจะถูกสร้างขึ้นเวลาในมิลลิวินาทีจาก 1 มกราคม 1970 วันที่ยามเช้าตรู่ |
4 | String สาธารณะ getId () ส่งคืนวัตถุ ID เซสชั่น |
5 | getLastAccessedTime ยาว (มหาชน) ส่งกลับครั้งสุดท้ายที่ลูกค้าเข้าเยี่ยมชมในมิลลิวินาทีจาก 1 มกราคม 1970 วันที่ยามเช้าตรู่ |
6 | int สาธารณะ getMaxInactiveInterval () ส่งคืนช่วงเวลาสูงสุดในวินาทีภาชนะ servlet จะทำให้เซสชั่นเปิดในเวลานี้ |
7 | โมฆะสาธารณะโมฆะ () โมฆะเซสชั่น unbundling วัตถุใด ๆ ผูกไว้กับเซสชั่น |
8 | บูลีนสาธารณะ isNew ( ผลตอบแทนที่ได้ไม่ว่าจะเป็นลูกค้าใหม่หรือในกรณีที่ลูกค้าปฏิเสธที่จะเข้าร่วมเซสชั่น |
9 | โมฆะสาธารณะ removeAttribute (ชื่อ String) ลบชื่อวัตถุเซสชั่นที่ระบุ |
10 | โมฆะสาธารณะ setAttribute (ชื่อ String วัตถุ ค่า) ในการผลิตวัตถุที่มีชื่อระบุและความคุ้มค่าและถูกผูกไว้กับเซสชั่น |
11 | โมฆะสาธารณะ setMaxInactiveInterval (ช่วง int) เพื่อระบุเวลาเป็นวินาทีภาชนะ servlet จะทำให้เซสชั่นที่ถูกต้องในช่วงเวลานี้ |
แอพลิเคชัน JSP เซสชัน
ตัวอย่างนี้อธิบายวิธีการใช้วัตถุ HttpSession เพื่อให้ได้เวลาการสร้างและเวลาเข้าถึงล่าสุด เราจะเป็นวัตถุเซสชั่นใหม่สำหรับคำขอวัตถุที่เกี่ยวข้องถ้าวัตถุนี้ไม่ได้อยู่แล้ว
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <% // 获取session创建时间 Date createTime = new Date(session.getCreationTime()); // 获取最后访问页面的时间 Date lastAccessTime = new Date(session.getLastAccessedTime()); String title = "再次访问本教程实例"; Integer visitCount = new Integer(0); String visitCountKey = new String("visitCount"); String userIDKey = new String("userID"); String userID = new String("ABCD"); // 检测网页是否由新的访问用户 if (session.isNew()){ title = "访问本教程实例"; session.setAttribute(userIDKey, userID); session.setAttribute(visitCountKey, visitCount); } else { visitCount = (Integer)session.getAttribute(visitCountKey); visitCount += 1; userID = (String)session.getAttribute(userIDKey); session.setAttribute(visitCountKey, visitCount); } %> <html> <head> <title>Session 跟踪</title> </head> <body> <h1>Session 跟踪</h1> <table border="1" align="center"> <tr bgcolor="#949494"> <th>Session 信息</th> <th>值</th> </tr> <tr> <td>id</td> <td><% out.print( session.getId()); %></td> </tr> <tr> <td>创建时间</td> <td><% out.print(createTime); %></td> </tr> <tr> <td>最后访问时间</td> <td><% out.print(lastAccessTime); %></td> </tr> <tr> <td>用户 ID</td> <td><% out.print(userID); %></td> </tr> <tr> <td>访问次数</td> <td><% out.print(visitCount); %></td> </tr> </table> </body> </html>
พยายามเข้าถึง http: // localhost: 8080 / testjsp / main.jsp, การทำงานครั้งแรกจะได้รับผลดังต่อไปนี้:
เยี่ยมชมอีกครั้งที่เราจะได้รับผลดังต่อไปนี้:
ลบข้อมูลเซสชัน
เมื่อเสร็จสิ้นการประมวลผลข้อมูลเซสชั่นของผู้ใช้คุณมีตัวเลือกต่อไปนี้:
- นำคุณสมบัติเฉพาะ:
โทรโมฆะ removeAttribute สาธารณะ (ชื่อ String) วิธีการที่จะเอาคุณสมบัติที่ระบุ
- ในการลบสนทนาทั้งหมด:
โทรโมฆะสาธารณะโมฆะ () วิธีการที่จะทำให้ทั้งเซสชันไม่ถูกต้อง
- ตั้งค่าระยะเวลาเซสชัน:
โทรโมฆะ setMaxInactiveInterval (ช่วง int) วิธีการของประชาชนที่จะตั้งค่าหมดเวลาเซสชั่น
- เข้าสู่ระบบผู้ใช้:
Servlet2.4 สนับสนุนรุ่นของเซิร์ฟเวอร์คุณสามารถโทรออกจากระบบ () วิธีการออกจากระบบของผู้ใช้และเซสชั่นที่เกี่ยวข้องทั้งหมดไม่ถูกต้อง
- แฟ้มการกำหนดค่า web.xml:
ถ้าคุณกำลังใช้ Tomcat คุณสามารถกำหนดค่าไฟล์ web.xml ต่อไปนี้:
<session-config> <session-timeout>15</session-timeout> </session-config>
หมดเวลาในนาทีหมดเวลา Tomcat เริ่มต้นคือ 30 นาที
Servlet ใน getMaxInactiveInterval () วิธีการส่งกลับวินาทีหมดเวลา หาก web.xml มีการกำหนดค่าสำหรับ 15 นาทีจากนั้น getMaxInactiveInterval () วิธีการจะกลับมา 900