session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動創建,完成會話期管理。從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱爲一個會話。
常用方法:
Object getAttribute(String name) //獲取指定名字的屬性
Enumeration getAttributeName() //獲取 session 中全部屬性的名字,一個枚舉
long getCreationTime() //返回 session 的創建時間,單位:毫秒
String getld() //返回創建 session 時 JSP 引擎爲它設置的唯一 ID 號
long getLastAccessedTime() //返回此 session 中客戶端最近一次請求的時間,單位是毫秒。使用這個方法,可以判斷某個用戶在站點上一共停留了多長時間
int getMaxInactiveInterval() //返回兩次請求間隔多長時間 session 被銷燬(單位:秒)
void setMaxlnactivelnterval(int interval) //設置兩次請求間隔多長時間 session 被銷燬(單位:秒)
void invalidate() //銷燬 session 對象
boolean isNew() //判斷請求是否會產生新的 session 對象
void removeAttribute(String name) //刪除指定名字的屬性
void setAttribute(String name,String value) //設定指定名字的屬性值
創建及獲取客戶會話屬性:
JSP 頁面可以將任何對象作爲屬性來保存。使用 setAttribute() 方法設置指定名稱的屬性,並將其存儲在 session 對象中,使用 getAttribute() 方法獲取與指定名字 name 相聯繫的屬性。
語法格式如下:
session.setAttribute(String name,String value); //參數name爲屬性名稱,value爲屬性值
session.getAttribute(String name); //參數 name 爲屬性名稱
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>創建及獲取客戶會話屬性</title>
</head>
<body>
session的創建時間:<%=new Date(session.getCreationTime()).toString() %><br>
session的ID: <%=session.getId() %><br><hr>
當前時間:<%=new Date().toString( ) %> <br>
該 session 是新創建的嗎?:<%=session.isNew()?"是":"否" %> <br> <hr>
當前時間:<%=new Date().toString( ) %> <br>
</body>
</html>
從會話中移除指定的對象:
JSP 頁面可以將任何已經保存的對象部分或者全部移除。
使用removeAttribute() 方法,將指定名稱的對象移除,也就是說,從這個會話刪除與指定名稱綁定的對象。使用 invalidate() 方法,可以將會話中的全部內容刪除。
語法格式如下:
session.removeAttribute(String name); //參數name爲session對象的屬性名,代表要移除的對象名
session.invalidate(); //把保存的所有對象全部刪除
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
session的創建時間:<%=new Date(session.getCreationTime()).toString() %><br>
session的ID: <%=session.getId() %><br><hr>
當前時間:<%=new Date().toString( ) %> <br>
該 session 是新創建的嗎?:<%=session.isNew()?"是":"否" %> <br> <hr>
當前時間:<%=new Date().toString( ) %> <br><br><hr>
<%
session.removeAttribute("info");
if(session.getAttribute("info")==null)
{
out.println("session 對象 info 已經不存在");
}
else
{
out.println(session.getAttribute("info"));
}
%>
</body>
</html>
設置會話時限:
當某一客戶與 Web 應用程序之間處於非活動狀態時,並不以顯式的方式通知服務器,所以,在 Servlet 程序或 JSP 文件中,做超時設置是確保客戶會話終止的唯一方法。
Servlet 程序容器設置一個超時時長,當客戶非活動的時間超出時長的大小時,JSP 容器將使 session 對象無效,並撤銷所有屬性的綁定,這樣,就清除了客戶申請的資源,從而實現了會話生命週期的管理。
session 用於管理會話生命週期的方法有 getLastAccessedTime()、getMaxInactiveInterval() 和 setMaxInactiveInterval(int interval)。
session.getMaxInactiveInterval() //對象默認的有效時間
session.setMaxInactiveInterval(60*5) //設置session的有效時間爲5分鐘
session.getMaxInactiveInterval() //修改有效時間
購物車例題:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="shop.jsp" method="post">
<p>各種球類大甩賣</p>
<p>
<input type="checkbox" name="ball" value="籃球">籃球
<input type="checkbox" name="ball" value="足球">足球
<input type="checkbox" name="ball" value="乒乓球">乒乓球
</p>
<p>
<input type="submit"value="確認">
<a href="meat.jsp">買點別的</a>
<a href="shop.jsp">購物車</a>
</p>
<%
request.setCharacterEncoding("utf-8");
String b[]= request.getParameterValues("meat");
if(b!=null)
session.setAttribute("b",b);
%>
</form>
</body>
</html>