session物件、cookie物件和appliaction物件

日暮途遠丨發表於2020-12-25

4.session物件

4.1概念

Session稱為一次會話,瀏覽器的開啟及關閉

4.2方法

方法名描述
setAttribute(key,val)設定鍵值對
getAttribute(key)通過鍵獲取值
getId()獲取session的id
setMaxInactiveInterval(time)設定session的過期時間[單位:秒](tomcat中預設配置的過期時間是30分鐘)
removeAttribute(key)從session中移除指定的key

4.3案例

使用session實現頁面訪問許可權控制

<!--login.jsp-->
<%
String errMsg = "";
//登入頁面可能會被開啟多次(使用者想要切換賬戶)
Object object = session.getAttribute("errMsg");
if(object != null){//從登入失敗後跳轉過來的
  errMsg = (String)object;
  //移除session中的key
  session.removeAttribute("errMsg");
}
%>
<p style="color:red;"><%=errMsg%></p>
<form action="control.jsp" method="post">
  <input type="text" name="uname" placeholder="請輸入使用者名稱">
  <input type="password" name="pwd" placeholder="請輸入密碼">
  <input type="submit" value="登入">
</form>
<!--control.jsp-->
<%
//設定請求編碼格式
request.setCharacterEncoding("utf-8");
//獲取表單中的引數
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
//對使用者名稱及密碼進行驗證(運算元據庫)
if("admin".equals(uname) && "admin".equals(pwd)){
  //將使用者的使用者名稱儲存起來作為登入成功的標識
  session.setAttribute("uname",uname);
  //設定session的失效事件(單位:秒)
  session.setMaxInactiveInterval(5);
  //登入成功直接跳轉到個人中心頁面
  response.sendRedirect("person.jsp");
}else{
  //通過session儲存一個錯誤資訊
  session.setAttribute("errMsg","使用者名稱或密碼錯誤");
  //回到登入頁面,並提示錯誤資訊
  response.sendRedirect("login.jsp");
}
%>
<!--個人中心-->
<%
//首先需要先驗證使用者是否已經登入
Object object = session.getAttribute("uname");
if(object == null){//代表使用者未登入,跳轉到登入頁面
  response.sendRedirect("login.jsp");
  return;
}
%>
<h4>個人中心</h4>
<p>歡迎,<%=object%></p>

4.4Cookie物件

4.4.1概念

cookie是在本地進行資料儲存的物件,訪問速度快、效率高但是不安全

<%
	 //將name儲存到Cookie中
  Cookie nameCookie = new Cookie("name",name);
	//將建立的cookie儲存到響應頭中
  response.addCookie(nameCookie);
%>
<%
  //獲取cookie
  Cookie[] cookies = request.getCookies();
  for(Cookie cook : cookies){
    String val = cook.getValue();
    out.println(cook.getName()+":"+val+"<br/>");
  }
%>
4.4.2Cookie生效時間

1.值為正數時,代表了cookie的存活時長(秒為單位)

2.值為0時,代表立即清除cookie

3.值為負數時,代表cookie的生命週期與當前會話一致

<%
	Cookie nameCookie = new Cookie("name",name);
  //設定cookie的生效時間setMaxAge() 秒
  nameCookie.setMaxAge(10);
  response.addCookie(nameCookie);
%>
<%
//獲取cookie
Cookie[] cookies = request.getCookies();
if(cookies != null){
  for(Cookie cook : cookies){
    String val = cook.getValue();
    //設定cookie立馬失效
    cook.setMaxAge(0);
    //更新response中的cookie物件
    response.addCookie(cook);
    //對獲取到的資料進行解碼
    //val = URLDecoder.decode(val,"utf-8");
    out.println(cook.getName()+":"+val+"<br/>");
  }
}
%>
4.4.3Session與Cookie的區別

1.session是儲存在服務端的,Cookie是儲存在客戶端

2.session資料安全,Cookie資料不安全

3.session效率較低,Cookie效率相對較高

5.application物件

5.1 概念

application是全域性作用域物件,也稱為web的上下文物件,通常用於儲存一些全域性引數

5.2 方法名

setAttribute(key,val) 設定全域性引數

getAttribute(key) 獲取全域性引數

5.3 全域性作用域案例

<%
	//設定預設的閱讀量
    int count = 0;
    //1.先從全域性作用域中獲取儲存的已訪問的數量
    Object object = application.getAttribute("count");
    if(object != null){
        count = (Integer)object;
    }
    //2.在已有的閱讀量的基礎上+1
    count++;
    //3.將最新的閱讀量儲存到全域性作用域中(更新)
    application.setAttribute("count",count);
%>
閱讀量:<%=count%>

6.jsp的四大作用域

作用域描述
pageContext只在當前頁面生效
request在一次請求中生效
session在一次會話中生效
application在整個web中生效

1.示例:

//index頁面
<%
    //當前頁
    pageContext.setAttribute("pageContext","當前頁生效");
    //請求中
    request.setAttribute("request","一次請求中生效");
    //一次會話
    session.setAttribute("session","一次會話中生效");
    //全域性作用域
    application.setAttribute("application","整個web專案中");
  %>
  <hr>
  pageContext:<%=pageContext.getAttribute("pageContext")%>
  <hr>
  request:<%=request.getAttribute("request")%>
  <hr>
  session:<%=session.getAttribute("session")%>
  <hr>
  application:<%=application.getAttribute("application")%>

在這裡插入圖片描述

在index頁面是可以同時生效4個作用域

2.示例

//show頁面
<hr>
pageContext:<%=pageContext.getAttribute("pageContext")%>
<hr>
request:<%=request.getAttribute("request")%>
<hr>
session:<%=session.getAttribute("session")%>
<hr>
application:<%=application.getAttribute("application")%>

在這裡插入圖片描述

show頁面只有session作用域和全域性作用域生效

3.示例:

將show頁面網址換個瀏覽器開啟就相當於是更換了一次會話

在這裡插入圖片描述

7.include指令

include指令用於引入其他的頁面

<%@ include file="permission.jsp"%>
    //或
<jsp:forward page="session/login.jsp"/>    

動作標籤(將jsp中的常見的一些功能以標籤的形式進行使用)

1.<jsp:include /> 將另一個頁面中的內容引入進來,include的指令會將整個jsp頁面進行編譯及翻譯的過程,可以使用變數

(動作標籤只是引入了頁面的結果,指令是將整個jsp的邏輯等都載入進來)
2. <jsp:forward /> 以標籤的形式替換了request在小指令碼中的跳轉形式

相關文章