天天看點

Java web中 Cookie Session 基本初識1、會話2、儲存會話的倆種技術3、Cookie3、Session(重點)4、Session 倆種銷毀方式

1、會話

無狀态會話 :使用者打開一個浏覽器,點選了很多超連結,通路多個web資源,關閉浏覽器,這個過程可以有狀态稱會話:一個同學來過教室,下次再來教室,我們會知道這個同學,曾經來過,稱之為有狀态會話

2、儲存會話的倆種技術

cookie

  • 用戶端技術(響應、請求)

session

  • 伺服器技術,利用這個技術,可以儲存使用者的會話資訊。
  • 我們可以把資訊活着資料放在Session中
常見應用:網站登入之後,你下次不用再登入了,第二次通路直接就上去了

3、Cookie

  1. 從請求中拿到cookie資訊
  2. 伺服器響應給用戶端 cookie
    Java web中 Cookie Session 基本初識1、會話2、儲存會話的倆種技術3、Cookie3、Session(重點)4、Session 倆種銷毀方式

3.cookie的一些細節問題(不同系統不同)

一般會儲存在本地的使用者目錄下 appdata

一個cookie隻能儲存一個資訊(每次儲存一個)

一個web站點可以給浏覽器發送多個cookie,最多存放20個cookie

Cookie大小限制4kb

300個cookie浏覽器上限

4.删除cookie

方式一:不設定有消息,關閉浏覽器,自動失效

方拾二:設定有效期時間為0

解碼、編碼

URLEncoder.encode("張三","utf-8");
URLDecoder.decode("張三","utf-8");
           

建立cookie代碼(含過期時間)

package com.ctra.cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

/*
 * 添加一個 cookie
 * 并且添加一個有效期
 * 在頁面輸出
 * */
public class CookieDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        PrintWriter out = resp.getWriter();

        Cookie[] cookies = req.getCookies();
        if (cookies.length>0){
            for (Cookie cookie : cookies) {
                if(cookie.getName().equals("currentTime")){
                    long time = Long.parseLong(cookie.getValue());
                    Date date = new Date(time);
                    out.write(String.valueOf(date));
                }
            }
        }else{
            out.write("您這是第一通路:");
        }

        Cookie cookie = new Cookie("currentTime", System.currentTimeMillis() + "");
        cookie.setMaxAge(24*60*60);
        resp.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

           

如上代碼,在浏覽器中可以看到headers中Set-Cookie中的内容

Java web中 Cookie Session 基本初識1、會話2、儲存會話的倆種技術3、Cookie3、Session(重點)4、Session 倆種銷毀方式

3、Session(重點)

什麼是session:

  • 伺服器會給每一個使用者(浏覽器)建立一個Session對象
  • 一個Session獨占一個浏覽器,隻要浏覽器不關閉,這個Session就存在
  • 登入後整個網站可以通路
    Java web中 Cookie Session 基本初識1、會話2、儲存會話的倆種技術3、Cookie3、Session(重點)4、Session 倆種銷毀方式

Session預設開啟

session原理就是打開浏覽器就會在cookie中添加了一個JSESSIONID的一個鍵值對

Java web中 Cookie Session 基本初識1、會話2、儲存會話的倆種技術3、Cookie3、Session(重點)4、Session 倆種銷毀方式

Session的使用場景

  • 儲存一個登入使用者的資訊
  • 購物車資訊
  • 在整個網站中經常會使用的資料,我們将它儲存在Session中

Session和cookie的差別

  • Cookie是把使用者的資料寫給使用者的浏覽器,浏覽器儲存(可以儲存多個)
  • Session是把使用者的資料寫到使用者獨占的Session中,伺服器端儲存(儲存重要的資訊,減少伺服器資源的浪費)
  • Session對象由服務建立
Java web中 Cookie Session 基本初識1、會話2、儲存會話的倆種技術3、Cookie3、Session(重點)4、Session 倆種銷毀方式
Java web中 Cookie Session 基本初識1、會話2、儲存會話的倆種技術3、Cookie3、Session(重點)4、Session 倆種銷毀方式

會話自動過期:web.xml配置

<!-- session失效時間-->
    <session-config>
        <!-- session 失效 15秒-->
        <session-timeout>15</session-timeout>
    </session-config>
           

4、Session 倆種銷毀方式

手動銷毀