摘要:協(xié)議是無狀態(tài)的,一旦數(shù)據(jù)交換完畢,客戶端與服務(wù)器端的連接就會關(guān)閉,再次交換建立新的連接,也就是說,服務(wù)器無法跟蹤會話。而和就是用與解決這種問題。值得一提的是是建立在的基礎(chǔ)上創(chuàng)建的。注意在的文件中,設(shè)置了的生命周期最長為分鐘。
在將cookie 和 session 之前需要先理解什么是會話
會話:
用戶打開一個瀏覽器,點(diǎn)擊多個超鏈接,訪問多個web資源,然后關(guān)閉瀏覽器,整個過程稱為一個會話。
http協(xié)議是無狀態(tài)的,一旦數(shù)據(jù)交換完畢,客戶端與服務(wù)器端的連接就會關(guān)閉,再次交換建立新的連接,也就是說,服務(wù)器無法跟蹤會話。而cookie 和 session 就是用與解決這種問題。
1.什么是cookie
cookie是客戶端的技術(shù),程序把每個用戶數(shù)據(jù)以cookie的形式寫給用戶各自的瀏覽器,當(dāng)客戶端再次訪問服務(wù)器的時候,會帶著各自的Cookie過來,這樣服務(wù)器就能處理各自用戶的數(shù)據(jù)了
1.1. 如何使用cookie
Cookie cookie = new Cookie("name","value"); //創(chuàng)建一個cookie cookie.setPath("/"); //cookie記得一定要設(shè)定路徑,默認(rèn)是當(dāng)前的類的路徑,設(shè)置/代表是整個web應(yīng)用。 cookie.setMaxAge(""); //設(shè)置有效期限,默認(rèn)是瀏覽器的進(jìn)程,也就是瀏覽器關(guān)了,就沒了。如果是設(shè)置為負(fù)數(shù),那么cookie不會被存儲,并且會被刪除。如果設(shè)置為0,那么cookie會被刪除。(這些內(nèi)容在API上描述得非常清楚) response.addCookie(cookie);//添加cookie,這樣才能回寫給客戶端
以上的內(nèi)容就是關(guān)于如何去使用一個cookie了。
1.2. cookie的細(xì)節(jié)
根據(jù)API的描述,一個cookie最大為4KB.瀏覽器一般只允許存放300個cookie,每個站點(diǎn)最多存放20個Cookie。Cookie被創(chuàng)建的時候默認(rèn)使用Verssion 0 ,也就是http 1.0
1.2.1 cookie的刪除
在cookie的API中沒有刪除cookie的具體方法,但是我們可以通過設(shè)置cookie的生命周期,來講cookie刪除,設(shè)置為0代表刪除(詳解自行查看setMaxAge()方法)
cookie.setMaxAge(0); 如果說不想從request域中獲取cookie,然后將該cookie的生命周期設(shè)置為0,可以采用以下這個方法 Cookie cookie = new Cookie("想刪除的cooki名字","value"); cookie.setPath("");//此處路徑必須與想刪除的cookie一致 cookie.setMaxAge(0); response.addCookie(cookie);
1.3 cookie的獲取
request.getCookies(); //返回的是cookie的數(shù)組
以上就是cookie的常用方法。
1.4 cookie設(shè)置注釋
cookie.setComment("comment")
1.5 cookie 設(shè)置安全傳輸協(xié)議(例如 https ,ssl)
cookie.setSecure(true|false) 默認(rèn)為false
1.6 cookie 防止 xss(跨站腳本攻擊) 攻擊
cookie.setHttpOnly(true) // 高版本的 servlet Api中有提供此方法
當(dāng)將httpOnly設(shè)置為true時,將無法通過js腳本獲取cookie信息。能夠有效的防止xss攻擊
2.什么是session
session是服務(wù)端的技術(shù),當(dāng)瀏覽器第1次訪問web資源的時候,服務(wù)器會自動為其創(chuàng)建一個session,并保存在服務(wù)器,當(dāng)需要保存用戶數(shù)據(jù)的時候,可以將數(shù)據(jù)寫入session中。當(dāng)用戶訪問其他程序的時候,就可以直接從session中取值。值得一提的是sesion是建立在cookie的基礎(chǔ)上創(chuàng)建的。
2.1 session實(shí)現(xiàn)原理
session的實(shí)現(xiàn)原理是建立在給瀏覽器回寫cookie,并且是以JSESSIONID為鍵,但是這個cookie是沒有時間的,也就是說,當(dāng)你關(guān)閉瀏覽器時,代表一個會話結(jié)束了,也就是說你的session會被刪除,當(dāng)你再次訪問服務(wù)器的時候,服務(wù)器會為你重新創(chuàng)建一個session。
2.2 session的使用
2.2.1 客戶端不禁用cookie的情況
HttpSession session = request.getSession();//客戶端訪問服務(wù)器的時候,服務(wù)器會自動創(chuàng)建一個session,如果客戶端沒有禁用cookie的話。 String sessionId = session.getId(); Cookie cookie = new Cookie("JSESSIONID",sessionId); cookie.setPaht("/"); cookie.setMaxAge(30*60);//注意在tomcat的web.xml文件中,設(shè)置了session的生命周期最長為30分鐘。 response.addCookie(cookie); session.setAttribute("key","value");
2.2.2 客戶端禁用cookie的情況
如果客戶端禁用cookie,那么需要調(diào)用response的encodeURL("轉(zhuǎn)發(fā)的地址") HttpSession session = request.getSession(); String url1 = response.encodeURL("xxxx");//注意,調(diào)用這個方法之前,必須要先獲取session,(在該方法的API描述得很清楚) PrintWriter pw = response.getWriter(); pw.write(url1);
2.3 session的一些細(xì)節(jié)
設(shè)置session的生命周期
可以通過設(shè)置配置文件的形式,設(shè)置session的生命周期;在web.xml文件中添加如下代碼
30 //備注這里是以分鐘為單位
參考以下2篇博文:
https://my.oschina.net/kevina... 深入源碼剖析了session和cookie
http://blog.csdn.net/fangaoxi... 介紹了一些基本的知識
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/69841.html
摘要:例如要想在多個二級域名中共享,需要設(shè)置為頂級域名,這樣就可以在所有二級域名里面或者到這個的值了。頂級域名只能獲取到設(shè)置為頂級域名的,設(shè)置為其他子級域名的無法獲取。 Cookie和Session詳解 Cookie Cookie只存儲在客服端 Cookie是什么:Cookies是web服務(wù)器存放在用戶硬盤的一段文本,Cookies允許一個wen站點(diǎn)在用戶的機(jī)器存放一些文本的信息,并可以在以...
摘要:目前大多數(shù)的應(yīng)用都是用實(shí)現(xiàn)跟蹤的。的安全性一般,他人可通過分析存放在本地的并進(jìn)行欺騙。在安全性第一的前提下,選擇更優(yōu)??紤]到減輕服務(wù)器性能方面,應(yīng)當(dāng)適時使用。因此,維持一個會話的核心就是客戶端的唯一標(biāo)識,即。 showImg(https://segmentfault.com/img/bV8riL?w=800&h=444); 在技術(shù)面試中,經(jīng)常被問到說說Cookie和Session的區(qū)別...
摘要:什么是用來存儲客戶端的一小段文本是一門客戶端的技術(shù)因?yàn)槭谴鎯υ诳蛻舳藶g覽器中的是為了實(shí)現(xiàn)客戶端與服務(wù)器端之間的狀態(tài)的保持技術(shù),不安全,不要使用存儲敏感信息比如登錄狀態(tài)和登錄信息一些敏感的數(shù)據(jù)應(yīng)該存儲在服務(wù)器端的值從哪里來的當(dāng)你訪問一個網(wǎng)站這 什么是cookie, 用來存儲客戶端的一小段文本是一門客戶端的技術(shù) 因?yàn)閏ookie是存儲在客戶端瀏覽器中的是為了實(shí)現(xiàn) 客戶端與服務(wù)器端之間的狀態(tài)...
摘要:所謂的無連接就是服務(wù)器收到了客戶端的請求之后,響應(yīng)完成并收到客戶端的應(yīng)答之后,即斷開連接。從而節(jié)省傳輸時間。協(xié)議對事務(wù)的處理沒有記憶能力。這種方式某種方面上講解放了服務(wù)器,但是卻不利于客戶端與服務(wù)器的連接。 session與cookie是什么? session與cookie屬于一種會話控制技術(shù).常用在身份識別,登錄驗(yàn)證,數(shù)據(jù)傳輸?shù)?舉個例子,就像我們?nèi)コ匈I東西結(jié)賬的時候,我們要拿出我...
摘要:由于是存在客戶端上的,所以瀏覽器加入了一些限制確保不會被惡意使用,同時不會占據(jù)太多磁盤空間。簽名是對前兩部分的簽名,防止數(shù)據(jù)被篡改。的作用最開始的初衷是為了實(shí)現(xiàn)授權(quán)和身份認(rèn)證作用的,可以實(shí)現(xiàn)無狀態(tài),分布式的應(yīng)用授權(quán)。 前言 無狀態(tài)的HTTP協(xié)議 很久很久之前, Web基本都是文檔的瀏覽而已。既然是瀏覽, 作為服務(wù)器, 不需要記錄在某一段時間里都瀏覽了什么文檔, 每次請求都是一個新的HT...
閱讀 2103·2023-04-25 15:11
閱讀 3725·2021-09-23 11:57
閱讀 1441·2021-07-26 23:38
閱讀 1385·2019-08-30 15:54
閱讀 684·2019-08-30 15:53
閱讀 3301·2019-08-26 13:36
閱讀 1045·2019-08-26 12:01
閱讀 2925·2019-08-23 16:21