Cookie與Session整理記錄

1. Cookie

客戶端會(huì)話技術(shù),將數(shù)據(jù)保存到客戶端
基于響應(yīng)頭的set-cookie和請(qǐng)求頭的cookie實(shí)現(xiàn)

Cookie cookie = new Cookie("msg","hello-world");
//        cookie.setMaxAge(100);//正數(shù):將cookie數(shù)據(jù)寫(xiě)到硬盤(pán)文件中,持久化存儲(chǔ),存活時(shí)間 example:100秒
//        cookie.setMaxAge(0);//刪除cookie
//        cookie.setMaxAge(-1);//負(fù)數(shù):默認(rèn) 關(guān)閉瀏覽器則清空
//        cookie.setPath("/");//設(shè)置共享范圍,因?yàn)槟J(rèn)cookie只在當(dāng)前的虛擬目錄下共享
//        cookie.setDomain(".baidu.com");//設(shè)置一級(jí)域名相同 cookie可以在多個(gè)服務(wù)直接共享

resp.addCookie(cookie);

//      cookie的特點(diǎn)和作用:
//        1.cookie存放在客戶端瀏覽器
//        2.對(duì)于大小有限制(一般<4kb),以及同一個(gè)域名下cookie的數(shù)量也有限制(一般<20)
//        作用:
//            1.用于存放少量不太敏感的數(shù)據(jù)
//            2.不登錄情況下,對(duì)客戶端的身份校驗(yàn)
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
    String cookieName = cookie.getName();
    String cookieValue = cookie.getValue();

    System.out.println(cookieName + " " + cookieValue);
}

Demo

        //解決中文亂碼問(wèn)題
//        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        if (lastTimeValue != null) {

//            編解碼可以防止一些合法字符的問(wèn)題 比如 空格
            resp.getWriter().write("歡迎登錄,您上次登錄時(shí)間為 " + URLDecoder.decode(lastTimeValue,"utf-8"));
        } else {

            resp.getWriter().write("歡迎您首次登錄!");
        }
        LocalDateTime localDateTime = LocalDateTime.now();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        lastTimeValue = localDateTime.format(dateTimeFormatter);

        resp.addCookie(new Cookie(lastTimeKey, URLEncoder.encode(lastTimeValue,"utf-8")));

2. Session

服務(wù)器端會(huì)話技術(shù),在一次會(huì)話的多次請(qǐng)求間共享數(shù)據(jù),將數(shù)據(jù)保存在服務(wù)器端的對(duì)象中,HttpSession
基于cookie的JSESSIONID查找內(nèi)存中存儲(chǔ)的對(duì)象

HttpSession session = req.getSession();
String o = (String)session.getAttribute("go");
System.out.println(o);
session.setAttribute("go","123");
//session.removeAttribute("go");

//如何保證瀏覽器關(guān)閉之后依然拿到指定的session
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60*24);//一天有效
resp.addCookie(cookie);

//session會(huì)在服務(wù)器關(guān)閉時(shí)銷毀
//session調(diào)用invalidate()自毀
//session默認(rèn)失效時(shí)間30分鐘 可以在配置文件中修改session-timeout

//tomcat在服務(wù)器關(guān)閉時(shí)會(huì)將session鈍化(服務(wù)器正常關(guān)閉之前會(huì)將數(shù)據(jù)序列化到硬盤(pán)上),啟動(dòng)后會(huì)活化(將session文件轉(zhuǎn)化為內(nèi)存中的session對(duì)象)

3. 區(qū)別

1.cookie在客戶端,session在服務(wù)端
2.cookie有大小限制,session沒(méi)有,session可以存儲(chǔ)任意類型
3.cookie相對(duì)不安全,session數(shù)據(jù)安全

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容