session的詳細說明和用法

南夏發表於2015-12-23

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>
  
密&nbsp;&nbsp;碼:<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也無法使用

 

相關文章