天天看點

JavaWeb 後端 <四> 之 Cookie HttpSession 學習筆記一、會話管理概述二、用戶端技術:Cookie三、伺服器端技術:HttpSession

1、什麼是會話?

好比一次通話。打開浏覽器,點選多次連結(發出多次請求和收到多次的響應),關閉浏覽器,這個過程就是一次會話。

  有功能 可以  檔案 建立會話  

  

2、解決的問題是什麼?

共享多次請求中産生的資料。比如購物車。

0、HTTP協定的消息頭

請求消息頭:Cookie 用戶端向伺服器端傳遞資訊

響應消息頭:Set-Cookie 伺服器端向用戶端傳遞資訊

1、Cookie詳解:

l  屬性:

name:Cookie的名稱,必要的屬性

value:Cookie的取值(不能為中文),必要的屬性

-------------------以下為可選屬性

path:Cookie的路徑

  預設值就是寫cookie的那個資源的通路路徑

  注意:

     如果一個存在浏覽器緩存中的cookie的路徑是/day09/servlet/

     當通路http://localhost:8080/day09/CookiePathDemo1時,

     浏覽器根本不帶Cookie給伺服器。浏覽器比對的是cookie的路徑和目前通路的資源的路徑。

     浏覽器滿足一下條件就會帶cookie給伺服器:

            目前通路的位址的路徑.startWith(已存cookie的路徑)。

            即:如果一個Cookie的路徑設定為了目前應用,說明通路該網站的任何資源時浏覽器都帶該cookie給伺服器。(開發中經常做的)

maxAge:Cookie的最大生存時間。預設是在浏覽器的記憶體中。

domain:Cookie的域名(網站)。預設就是寫cookie的那個資源所屬的網站。

     http://localhost:8080/day09_00_cookie/servlet/CookieDemo1域名就是localhost

version:版本号

comment:注釋

u  把Cookie寫給用戶端:

HttpServletResponse.addCookie(Cookie c):實際上就是向用戶端發送了一個響應消息頭。

注意:用戶端隻能儲存一個網站最多20個Cookie資料,總共最多300個。每個Cookie的大小不能超過4kb。

l  伺服器端擷取用戶端帶來的Cookie:

Cookie [] HttpServletRequest.getCookies();

注意:domain+path+name唯一确定一個Cookie。

2、3個案例

a、顯示使用者最近的通路時間

示範Cookie的path

b、記住登入的使用者名

<code></code>

<code>public class LoginServlet extends HttpServlet {</code>

<code>      public void doGet(HttpServletRequest request, HttpServletResponse response)             throws ServletException, IOException {         response.setContentType("text/html;charset=UTF-8");         PrintWriter out = response.getWriter();                   //驗證使用者名和密碼是否正确:此處輸什麼都正确         String username = request.getParameter("username");         String password = request.getParameter("password");         String remember = request.getParameter("remember");//沒有選中就是null                   Cookie c = new Cookie("loginInfo", username);         c.setPath(request.getContextPath());         if(remember==null){             //沒有選中:删cookie             c.setMaxAge(0);         }else{             //使用者記住使用者名:存cookie             c.setMaxAge(Integer.MAX_VALUE);         }         response.addCookie(c);         out.write("登入成功");               }       public void doPost(HttpServletRequest request, HttpServletResponse response)             throws ServletException, IOException {         doGet(request, response);     }   }</code>

 c.顯示 最近浏覽的産品 (圖書)

1、HttpSession是一個域對象及HttpSession的原理

  void setAttribute(String name,Object value);

  Object getAttribute(String name);

  void removeAttribute(String name);

  String getId()

  HttpSession request.getSession();

HttpSession request.getSession(boolean b):

b如果為true,和getSession()完全一樣的

b為false,伺服器隻是查找,找不到不會建立新的,傳回null。

HttpSession.invalidate();使HttpSession對象立即失效。

a、使用Session完成簡單的購物功能

使用上邊的 book類 和 模拟 bookdb 資料

public class Book implements Serializable

b、完成使用者的登入

c、防止表單的重複送出

3、用戶端禁用Cookie後的會話資料的保持

用戶端永遠不會向伺服器端帶任何cookie。

解決辦法:

方式一:(烏龍)文字提示:請不要禁用您的Cookie

方式二:在通路的位址後面加上JSESSIONID=session的id。

response.encodeUrl(String url);自動重寫。 對購物車案例 修改了

4、HttpSession對象的狀态

很多 銀行的保護性就是将session 減短了。

public class Book implements Serializable 序列化

 總結:

一、會話概述

    1、如同一次電話通話。

    2、會話中要解決的問題:多次請求中的資料的保持問題。典型:購物車

二、Cookie

    1、屬性:

        name value path maxAge domain version 等

    2、HttpServletResponse.addCookie(Cookie c)

    3、HttpServletRequest.getCookies()

    4、記住使用者名和記住使用者的浏覽記錄

三、HttpSession

    1、HttpSession是一個域對象

    2、HttpSession的原理(借助Cookie)

    3、HttpSession.getSession():先查(按照session對象的ID去查),沒有再建立。

    4、案例:

        簡單購物車

        使用者登入和驗證碼驗證

        防止表單的重複送出:從原理上明白

    5、用戶端禁用了Cookie後的會話資料保持問題

        URL重寫

    6、HttpSession對象的狀态變化:鈍化和激活。   向HttpSession中存放的對象的類,要實作java.io.Serializable接口

    7、浏覽器何時會開啟一次新的會話。

繼續閱讀