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