session的詳細說明和用法
session物件
JSP中session的使用,包括sessionId的取得,invalidate、isNew等方法的使用
session 是package javax.http.servlet 下的Interface HttpSession介面
主要應用:使用者登陸判斷和購物車的實現.
session的主要方法:
在伺服器上通過session來區分不同的使用者-->sessionID:任何連線到伺服器上的使用者,伺服器都會為之
分配唯一的不會重複的session ID
(1)取得session ID的方法:session.getId()
sessionId.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<h1>SESSIONID:<%=session.getId() %></h1>
此案例我們可以看出,不管怎麼重新整理IE,session id始終不變,其實sessionid 是由伺服器統一管理的,人為
不能控制.
<%@ pagecontentType="text/html;charset=gb2312" %>
<h1>SESSIONID:<%=session.getId() %></h1>
<h1>SESSIONID Length:<%=session.getId().length() %></h1>
可以看出session id的長度為32位
(2)判斷是否是新的session:session.isNew()
sessionNew.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%
if(session.isNew())
{
%>
<h1>歡迎光臨本頁</h1>
<%
}
else
{
%>
<h1>你不是新的session</h1>
<%
}
%>
如果是在sessionId.jsp上點開的頁面,則列印"你不是新的session",如果重新開啟一個瀏覽器,則列印"歡迎光臨本頁"
(3)設定屬性:session.setAttribute(Stringname, Object value)
(4)取得屬性:session.getAttribute(Stringname)
通過一個範例來說明session的用法:使用者輸入姓名為tiger,密碼為123456,則表示登陸成功,成功後可以瀏覽welcome.jsp頁面
login.jsp:表單 接收引數,判斷使用者是否合法
<%@ pagecontentType="text/html;charset=gb2312"%>
<form action="login.jsp" method="post">
使用者名稱:<inputtype="text" name="uname"><br>
密 碼:<input type="password"name="upass"><br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
<%
if(request.getParameter("uname")!=null&&request.getParameter("upass")!=null)
{
//接收自提交引數
String name = request.getParameter("uname");
String password =request.getParameter("upass");
//System.out.println(name);
//System.out.println(password);
if("tiger".equals(name)&&"123456".equals(password))
{
//合法使用者,跳轉到weicome.jsp
//判斷使用者為合法使用者,接下來設定session的屬性user的值為ok
session.setAttribute("user","ok");
response.sendRedirect("welcome.jsp");
%>
<%
}
else
{
//非法使用者,列印錯誤
%>
<h1>登陸失敗!!</h1>
<%
}
}
%>
welcome.jsp:歡迎頁,要求使用者先登陸之後才能訪問,否則不能訪問
<%@ page contentType="text/html;charset=gb2312"%>
<%
//取出session設定的屬性值進行判斷,看是否為空
if(session.getAttribute("user")!=null)
{
%>
<h1>歡迎光臨!!!</h1>
<%
}
else
{
%>
<h1>你還未登陸,2秒後返回登陸頁</h1>
<%
response.setHeader("refresh","2;url=login.jsp");
}
%>
(5)刪除屬性session.removeAttribute(String name)
注意:j2ee的session的方法中有三個Deprecated的方法,它和現在用的方法的關係
putValue(String name, Object value)------->setAttribute(String name, Object value)
getValue(String name) -------->getAttribute(String name)
removeValue(String name) ----->removeAttribute(String name)
這幾個是廢棄的方法,不建議去使用!!
(6)使用者登出:讓使用者的session失效
如果session失效,則在session保留的全部操作也將消失
方法: invalidate(),此方法屬性一個手工操作的方法
如果session長時間不被使用,則也會自動消失
修改一直前面的welcome.jsp頁面,增加一句<a href="logout.jsp">登出</a>
<%@ page contentType="text/html;charset=gb2312"%>
<%
//取出session設定的屬性值進行判斷,看是否為空
if(session.getAttribute("user")!=null)
{
%>
<h1>歡迎光臨!!!</h1>
<a href="logout.jsp">登出</a>
<%
}
else
{
%>
<h1>你還未登陸,2秒後返回登陸頁</h1>
<%
response.setHeader("refresh","2;url=login.jsp");
}
%>
然後新建一個logout.jsp頁面,程式程式碼如下,執行看一下效果
<%@ pagecontentType="text/html;charset=gb2312" %>
<%
//使用者登出
session.invalidate();
%>
<a href="welcome.jsp">welcome.jsp</a>
(7)得到session的建立時間,也就是使用者登陸伺服器的時間
方法:long getCreationTime()該方法返回一個long型別
sessionTime.jsp
<%@ pagecontentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%
//取得session的建立時間
long l = session.getCreationTime();
%>
<h1><%=new Date(l) %></h1>
(8)取得使用者最後一次操作的時間
方法:long getLastAccessedTime()方法出返回一個long型別
修改後的session.jsp
<%@ pagecontentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%
//取得session的建立時間
long l = session.getCreationTime();
long l2 = session.getLastAccessedTime();
%>
<h1>Session的建立時間<%=new Date(l)%></h1>
<h1>最後一次操作時間<%=new Date(l2) %></h1>
隨著我們重新整理頁面,最後一次操作時間在變化
範例:求出使用者線上時間,通過公式:最後一次操作時間-Session的建立時間,但是要注意,這個方法並不科學
修改後的程式碼如下
<%@ pagecontentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%
//取得session的建立時間
long l = session.getCreationTime();
long l2 = session.getLastAccessedTime();
%>
<h1>Session的建立時間<%=new Date(l)%></h1>
<h1>最後一次操作時間<%=new Date(l2) %></h1>
<h1>使用者線上時間:<%=(l2-l)/1000 %></h1>
(9)session與cookie的比較
session儲存在伺服器上,而cookie儲存在客戶端上
session比cookie更安全,session比cookie更佔用資源
開發原則:儘量少使用session,儘量少向session儲存資訊
session使用了cookie的機制,如果cookie被禁用,session也無法使用
相關文章
- mysql replace into用法詳細說明MySql
- session和v$session說明Session
- Python中struct.pack()和struct.unpack()用法詳細說明PythonStruct
- mysql processlist詳細說明MySql
- nginx 詳解 – 詳細配置說明Nginx
- nginx 詳解 - 詳細配置說明Nginx
- 網路交換機功能和原理的詳細說明
- mysqldump引數詳細說明MySql
- redis info命令詳細說明Redis
- Emacs詳細使用說明(轉)Mac
- memset函式詳細說明函式
- winscp操作說明,winscp操作說明的詳細解讀
- Flask-Limit使用詳細說明FlaskMIT
- Linux sed命令詳細說明Linux
- VNC安裝配置詳細說明VNC
- Nginx配置檔案詳細說明Nginx
- CocoaPods | iOS詳細使用說明iOS
- 總帳介面表詳細說明
- 寬頻路由器的詳細說明路由器
- MySQL mysqldump命令的引數詳細說明MySql
- linux安裝mysql的步驟和方法詳細說明LinuxMySql
- 流量控制工具TC詳細說明
- sql server系統表詳細說明SQLServer
- mysql uninstall plugins 詳細說明MySqlPlugin
- jpa 方法 命名規則 詳細說明
- R語言-Knitr包的詳細使用說明R語言
- 資料庫的聚集索引和非聚集索引 很好的詳細說明資料庫索引
- php中的var_dump()方法的詳細說明PHP
- JQuery Datatables Columns API 引數詳細說明jQueryAPI
- Oracle RAC中Srvctl命令詳細說明(轉)Oracle
- sql server系統表詳細說明(zt)SQLServer
- 詳細說明搜尋引擎優化的過程優化
- Intellij IDEA 使用svn非常詳細的說明IntelliJIdea
- MySQL引數DELAY_KEY_WRITE的詳細說明MySql
- mydumper備份資料庫詳解(已詳細說明)資料庫
- linux系統vi命令詳細使用說明Linux
- Android清單AndroidManifest詳細說明Android
- Python Matplotlib add_subplot 和 subplots_adjust詳解及程式碼詳細說明 配圖片說明Python