日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

session和cookie到底有什么联系?这一篇文章给你分析的明明白白~

發(fā)布時(shí)間:2025/3/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 session和cookie到底有什么联系?这一篇文章给你分析的明明白白~ 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

存儲(chǔ)讀取session測(cè)試

5.如何用java獲取請(qǐng)求和響應(yīng)中HttpHeaders的Cookie呢?

6.cookie的格式

7.cookie如何存儲(chǔ)JSESSIONID?


session和cookie的區(qū)別:

cookie是存儲(chǔ)在本地?cái)?shù)據(jù);session是存儲(chǔ)在服務(wù)器上的數(shù)據(jù)。

存儲(chǔ)讀取session測(cè)試

1.先寫兩行代碼,在同一個(gè)服務(wù)器下,先后存儲(chǔ)session和取session。

@RequestMapping("testSession1")public void testSession1(){//存儲(chǔ)sessionrequest.getSession().setAttribute("test", "content");System.out.println("存儲(chǔ)test的值為content");}@RequestMapping("testSession2")public void testSession2(){//打印上次存儲(chǔ)的sessionSystem.out.println(request.getSession().getAttribute("test"));}

2.用瀏覽器分別請(qǐng)求這兩個(gè)請(qǐng)求。

顯示結(jié)果: 存儲(chǔ)test的值為content content

原因分析:瀏覽器自從將服務(wù)器端返回的cookie保存了起來,下次再訪問同一個(gè)服務(wù),就會(huì)帶著之前的cookie訪問,來證明是同一個(gè)用戶

3.用postman分別請(qǐng)求這兩個(gè)請(qǐng)求。(postman自帶cookie,如果JSESSIONID相同的話,服務(wù)器端也會(huì)認(rèn)為這是同一個(gè)用戶發(fā)起的兩個(gè)請(qǐng)求,所以請(qǐng)求結(jié)果和用瀏覽器一樣)

請(qǐng)求結(jié)果:

存儲(chǔ)test的值為content content

4.用redisTemplate或者h(yuǎn)ttpClient分別請(qǐng)求,因?yàn)檎?qǐng)求的Headers中不包含Cookie,所以被服務(wù)器端認(rèn)作不同用戶的請(qǐng)求,所以第二個(gè)請(qǐng)求session取不到。

5.如何用java獲取請(qǐng)求和響應(yīng)中HttpHeaders的Cookie呢?

//獲取響應(yīng)的Cookie HttpHeaders headers = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class).getHeaders(); List<String> cookies = headers.get("Set-Cookie");//向請(qǐng)求header放cookie HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.put("Cookie", cookies); HttpEntity<String> requestEntity2 = new HttpEntity<String>(null, httpHeaders); restTemplate.exchange(url2, HttpMethod.GET, requestEntity2, String.class);//獲取cookie public static List<String> getCookieList(HttpServletRequest request) {List<String> cookieList = new ArrayList<>();Cookie[] cookies = request.getCookies();if (cookies == null || cookies.length == 0) {return cookieList;}for (Cookie cookie : cookies) {cookieList.add(cookie.getName() + "=" + cookie.getValue());}return cookieList; }

6.cookie的格式

  根據(jù)Netscape公司的規(guī)定,Cookie格式如下:

  Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

  NAME=VALUE:

  這是每一個(gè)Cookie均必須有的部分。NAME是該Cookie的名稱,VALUE是該Cookie的值。在字符串“NAME=VALUE”中,不含分號(hào)、逗號(hào)和空格等字符。
  Expires=DATE:Expires變量是一個(gè)只寫變量,它確定了Cookie有效終止日期。該屬性值DATE必須以特定的格式來書寫:星期幾,DD-MM-YY HH:MM:SS GMT,GMT表示這是格林尼治時(shí)間。反之,不以這樣的格式來書寫,系統(tǒng)將無(wú)法識(shí)別。該變量可省,如果缺省時(shí),則Cookie的屬性值不會(huì)保存在用戶的硬盤中,而僅僅保存在內(nèi)存當(dāng)中,Cookie文件將隨著瀏覽器的關(guān)閉而自動(dòng)消失。
  Domain=DOMAIN-NAME:Domain該變量是一個(gè)只寫變量,它確定了哪些Internet域中的Web服務(wù)器可讀取瀏覽器所存取的Cookie,即只有來自這個(gè)域的頁(yè)面才可以使用Cookie中的信息。這項(xiàng)設(shè)置是可選的,如果缺省時(shí),設(shè)置Cookie的屬性值為該Web服務(wù)器的域名。
  Path=PATH:Path屬性定義了Web服務(wù)器上哪些路徑下的頁(yè)面可獲取服務(wù)器設(shè)置的Cookie。一般如果用戶輸入的URL中的路徑部分從第一個(gè)字符開始包含Path屬性所定義的字符串,瀏覽器就認(rèn)為通過檢查。如果Path屬性的值為“/”,則Web服務(wù)器上所有的WWW資源均可讀取該Cookie。同樣該項(xiàng)設(shè)置是可選的,如果缺省時(shí),則Path的屬性值為Web服務(wù)器傳給瀏覽器的資源的路徑名。
  可以看出我們借助對(duì)Domain和Path兩個(gè)變量的設(shè)置,即可有效地控制Cookie文件被訪問的范圍。
  Secure:在Cookie中標(biāo)記該變量,表明只有當(dāng)瀏覽器和Web Server之間的通信協(xié)議為加密認(rèn)證協(xié)議時(shí),瀏覽器才向服務(wù)器提交相應(yīng)的Cookie。當(dāng)前這種協(xié)議只有一種,即為HTTPS。

7.cookie如何存儲(chǔ)JSESSIONID?

https://blog.csdn.net/chunqiuwei/article/details/23461995

總結(jié)

以上是生活随笔為你收集整理的session和cookie到底有什么联系?这一篇文章给你分析的明明白白~的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。