學習jsp篇:jsp Session介紹


1、Session基本介紹

  Session---會話,它是一個內置對象。會話打個比方說就是瀏覽網站:開始到結束,或者說購物從開始到結束。

2、Session機制

  客戶端在第一次請求服務端時,服務端會產生一個Session對象(用於存儲客戶端信息),每一個Session對象都有唯一的SessionID(區別於其他客戶端),同時服務端會產生一個Cookie,並且該Cookie中有一對鍵值對name=JsessionID,value=SessionID。然后在響應客戶端的請求時將JsessionID傳給客戶端,至此客戶端就有了與服務端一一對應的值,即SessionID與JsessionID。

  客戶端在第二次請求時,服務端會拿客戶端中的JsessionID,去服務端中的Session匹配SessionID,如果匹配成功,說明該客戶端不是第一次訪問。然后可以直接登錄開始會話。

3、Session的服務機制

  a、Session存儲在服務端中

  b、Session在同一個用戶請求時共享

  c、實現機制:第一次客戶端請求時產生一個SessionId並賦值給Cookie的jSessionId,然后發送給客戶端,最終通過SessionId與JsessionId一一對應

4、舉個簡單例子

  去超市存包,第一次去超市存包時,首先申請櫃子,將你的東西放進櫃子中,同時超市給你一個鑰匙,該鑰匙和你放東西的櫃子一一對應(就像SessionID和JsessionID一一對應)。等到你第二次再去取你的東西時,不需要再申請拿鑰匙,而是直接拿你手上的鑰匙(JsessionID)與櫃子(SessionID)一一對應打開櫃子,取得你的東西。

5、常用方法

  a、getId()獲取SessionID

  b、boolean isNew() 判斷是否是新用戶(一般在第一次訪問時使用)

  c、void invalidate()使session失效(退出登錄,注銷)

  d、void setAttribute()

  e、Objetct getAttribute()

  f、void setMaxInactiveInterval(時間一般為秒)最大有效(非活動時間)

  g、int getMaxInactiveInterval()獲取最大有效時間(非活動時間)

6、Session實例

用戶請求登錄頁面login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登錄頁面</title>
</head>
<body>

<form action="check.jsp" method="post">
用戶名:<input type="text" name="uname"><br/>
密碼: <input type="password" name="upwd"><br/>
<input type="submit" name="提交"><br/>
</form>
</body>
</html>

登錄之后頁面,check.jsp(其實check.jsp在這相當於服務端)

<%@ page contentType="text/html;charset=UTF-8" language="java"<htm<head>   
<title>校驗頁面</title> </head> <body> <%
//設置編碼方式 request.setCharacterEncoding("utf-8");
//獲得登錄的用戶名和密碼
String name=request.getParameter("uname"); String password=request.getParameter("upwd");
//校驗是否登錄成功
if(name.equals("zz")&&password.equals("1111")){ //如果登錄成功,開始建立session(Session一般在用戶登錄成功時創建) session.setAttribute("uname",name);//建立session session.setAttribute("upwd",password); //獲得sessionID,並將session在控制台輸出 System.out.println("sessionID"+session.getId()); //設置session有效時間 //session.setMaxInactiveInterval(10);
//這里不用創建Cookie,服務端內部會自己創建JSessionID
//Cookie cookie=new Cookie("uname",name);
//response.addCookie(cookie); request.getRequestDispatcher("welcome.jsp").forward(request,response); }else{ response.sendRedirect("login.jsp"); } %> </body> </html>

如果登錄成功則進入welcome.jsp,否則跳回登錄頁面login.jsp

welcome.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
      歡迎您:
          <%
              String name=(String)session.getAttribute("uname");

              if(name==null){
                  response.sendRedirect("login.jsp");

              }else {
                  out.println(name);
              }
          %>
          <a href="invalidate.jsp">注銷</a>
</body>
</html>

在welcome中加入注銷功能,用<a href="invalidate.jsp">注銷</a>語句

invalidate.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
     <%
         session.invalidate();//session失效
         response.sendRedirect("login.jsp");
         //session.removeAttribute("uname");//部分失效
     %>
</body>
</html>

再建一個客戶端頁面A.jsp,在登錄之后,輸出下客戶端的JsessionId,看和之前的SessionId是否相等

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
      
<%
//同一個服務端有效
    %>
<%=session.getAttribute("uname")%> <% Cookie cookie[]=request.getCookies(); for(Cookie cookie1:cookie){ //驗證SessionID和JSESSIONID相等 if(cookie1.getName().equals("JSESSIONID")) System.out.println("JSESSIONID"+cookie1.getValue()); } %> </body> </html>

 7、Session與Cookie的區別

  session cookie
保存位置 服務端 客戶端
安全性
保存內容形式 Object String

8、總結下boby中代碼格式

  a、<%=%>輸出運算符

  b、<% !%>全局變量

  c、<% %>代碼運算符

9、常見狀態碼

  a、404 資源不存在

  b、403 權限不足

  c、200 一切正常

  d、300/30 頁面重定向

  e、500 服務器代碼有誤

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM