Latest web development tutorials

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