java中session對象及其經常使用方法
- session對象用於在會話範圍內,記錄每一個客戶端的訪問狀態,以便於跟蹤每一個客戶端的操做狀態,在會話存儲的信息,在瀏覽器發出後續請求時能夠獲取這些會話的有效數據。
- 在jsp頁面中能夠直接使用session對象(jsp的內置對象),也能夠經過pageContext.getSession()或者request.getSession從新回去session對象。
- session能夠保存用戶的信息和實現購物車等功能。
- HTTP協議是一種無狀態協議,客戶向服務器發出的請求request,而後服務器返回響應response,鏈接就被關閉了,在服務器不保存鏈接的有關信息,所以在下一次鏈接時,服務器已經沒有之前的鏈接信息了,沒法判斷這一次鏈接和上一次鏈接時同一個客戶信息,所以,必須使用會話記錄有關鏈接的信息。
- 從客戶打開瀏覽器鏈接到服務器,到客戶關閉瀏覽器離開這個服務器,稱作一個會話。當客戶訪問服務器是,可能會反覆鏈接這個服務器上的幾個頁面、反覆刷新一個頁面或不斷地向一個頁面提交信息等,服務器應當經過某種方法知道這是同一個客戶,這時就須要session對象。
- session的工做原理以下:
- 一、客戶首次訪問服務器的一個頁面時,服務器就會爲該用戶分配一個session對象,同時爲這個session指定惟一的ID,而且將該ID發送到客戶端並寫入到cookie中,使得客戶端與服務器的session創建一一對應的關係;
- 二、當客戶端繼續訪問服務器端的其它資源時,服務器再也不爲該客戶分配新的session對象,直到客戶端瀏覽器關閉、超時或調用session的invalidate()方法使其失效,客戶端與服務器的會話結束。
- 三、當客戶從新打開瀏覽器訪問網站時,服務器會從新爲客戶分配一個session對象,並從新分配sessionID。
- session對象主要用於屬性操做和會話管理,經常使用方法以下:
- 一、public void setAttribute(String name,String value)設定指定名字的屬性的值,並將它添加到session會話範圍內,若是這個屬性是會話範圍內存在,則更改該屬性的值。
- 二、public Object getAttribute(String name)在會話範圍內獲取指定名字的屬性的值,返回值類型爲object,若是該屬性不存在,則返回null。
- 三、public void removeAttribute(String name),刪除指定名字的session屬性,若該屬性不存在,則出現異常。
- 四、public void invalidate(),使session失效。能夠當即使當前會話失效,原來會話中存儲的全部對象都不能再被訪問。
- 五、public String getId( ),獲取當前的會話ID。每一個會話在服務器端都存在一個惟一的標示sessionID,session對象發送到瀏覽器的惟一數據就是sessionID,它通常存儲在cookie中。
- 六、public void setMaxInactiveInterval(int interval) 設置會話的最大持續時間,單位是秒,負數代表會話永不失效。
- 七、public int getMaxInActiveInterval(),獲取會話的最大持續時間。
- 八、使用session對象的getCreationTime()和getLastAccessedTime()方法能夠獲取會話建立的時間和最後訪問的時間,但其返回值是毫秒,通常須要使用下面的轉換來獲取具體日期和時間。
- Date creationTime = new Date(session.getCreationTime());
- Date accessedTime = new Date(session.getLastAccessedTime());
- <%@ page language="java" import="java.util.*" contentType="text/html;charset=GBK"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
-
- <title>session對象方法</title>
-
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
-
- <body>
- <b>
- 會話ID:<%=session.getId() %> <br>
- 是否新會話:<%=session.isNew() %><br>
- 設置和獲取屬性對象:用戶名 =
- <%session.setAttribute("用戶名","bing"); %>
- <%=session.getAttribute("用戶名") %><br>
- <%
- Date creationTime = new Date(session.getCreationTime());
- Date accessedTime = new Date(session.getLastAccessedTime());
- %>
- 會話建立時間:<%=creationTime %><br>
- 上次訪問時間:<%=accessedTime %><br>
- 會話持續時間(s):<%=session.getMaxInactiveInterval() %><br>
- <%session.setMaxInactiveInterval(12); %>
- 修改後的會話持續時間(s):<%=session.getMaxInactiveInterval() %><br>
- <%session.invalidate(); %>
- </b>
- </body>
- </html>
- 獲取session HttpServletRequest request , HttpSession session = request.getSession ();
- session.invalidate ();//清空session
歡迎關注本站公眾號,獲取更多信息