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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈Session与Cookie的关系

發(fā)布時間:2024/9/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈Session与Cookie的关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

閱讀目錄

一、概念理解:

首先cookie是服務端識別客戶的唯一標識的依據(jù),客戶在訪問網(wǎng)站時候,服務端為了記住這個客戶,會在服務端按照它的規(guī)則制作一個cookie數(shù)據(jù),會將這個cookie數(shù)據(jù)保留在服務端一段時間,同時會給客戶的一份它自己保留,這樣就無需每次都要登錄來認證自己了。

先來了解幾個概念。

1、無狀態(tài)的HTTP協(xié)議:

協(xié)議是指計算機通信網(wǎng)絡中兩臺計算機之間進行通信所必須共同遵守的規(guī)定或規(guī)則,超文本傳輸協(xié)議(HTTP)是一種通信協(xié)議,它允許將超文本標記語言(HTML)文檔從Web服務器

傳送到客戶端的瀏覽器。

HTTP協(xié)議是無狀態(tài)的協(xié)議。一旦數(shù)據(jù)交換完畢,客戶端與服務器端的連接就會關閉,再次交換數(shù)據(jù)需要建立新的連接。這
就意味著服務器無法從連接上跟蹤會話。

2、會話(Session)跟蹤:

會話,指用戶登錄網(wǎng)站后的一系列動作,比如瀏覽商品添加到購物車并購買。會話(Session)跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。常用的會話跟蹤技術

是Cookie與Session。Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務器端記錄信息確定

二、Cookie

由于HTTP是一種無狀態(tài)的協(xié)議,服務器單從網(wǎng)絡連接上無從知道客戶身份。服務器要想識別每個客戶端,怎么辦,那就給每個訪問我的用戶的客戶的一個通行證,這樣服務器就能從通行證上確認客戶身份了,這個通行證就是cookie的工作原理。

Cookie實際上是一小段的文本信息。客戶端請求服務器,如果服務器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個Cookie。客戶端會把Cookie保存起來。

當瀏覽器再請求該網(wǎng)站時,瀏覽器把請求的網(wǎng)址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶狀態(tài)。服務器還可以根據(jù)需要修改Cookie的內(nèi)容。

1、cookie的內(nèi)容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用范圍。

#Name 和 Value 屬性由程序設定,默認值都是空引用。

#Domain屬性的默認值為當前URL的域名部分,不管發(fā)出這個cookie的頁面在哪個目錄下的。

#Path屬性的默認值是根目錄,即 ”/” ,不管發(fā)出這個cookie的頁面在哪個目錄下的。可以由程序設置為一定的路徑來進一步限制此cookie的作用范圍。

#Expires 屬性,這個屬性設置此Cookie 的過期日期和時間。

2、Path和Domain屬性

-------------------------------------------------------------------- 注:如果你對python感興趣,我這有個學習Python基地,里面有很多學習資料,感興趣的+Q群:895817687 -------------------------------------------------------------------- --path:  如果http://www.china.com/test/index.html 建立了一個cookie,那么在http://www.china.com/test/目錄里的所有頁面,以及該目錄下面任何子目錄里的頁面都可以訪問這個cookie。這就是說,在http://www.china.com/test/test2/test3 里的任何頁面都可以訪問http://www.china.com/test/index.html建立的cookie。但是,如果http://www.china.com/test/ 需要訪問http://www.china.com/test/index.html設置的cookes,該怎么辦?這時,我們要把cookies的path屬性設置成“/”。在指定路徑的時候,凡是來自同一服務器,URL里有相同路徑的所有WEB頁面都可以共享cookies。--Domain:比如: http://www.baidu.com/xxx/login.aspx 頁面中發(fā)出一個cookie,Domain屬性缺省就是www.baidu.com ,可以由程序設置此屬性為需要的值。  值是域名,比如www.china.com。這是對path路徑屬性的一個延伸。如果我們想讓 www.china.com能夠訪問bbs.china.com設置的cookies,該怎么辦? 我們可以把domain屬性設置成“china.com”, 并把path屬性設置成“/”。3、會話Cookie和持久Cookie若不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,關閉瀏覽器窗口,cookie就消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不存儲在硬盤上而是保存在內(nèi)存里,當然這種行為并不是規(guī)范規(guī)定的。若設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉后再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。存儲在硬盤上的cookie可以在瀏覽器的不同進程間共享。這種稱為持久Cookie。

Cookie具有不可跨域名性

就是說,瀏覽器訪問百度不會帶上谷歌的cookie。

三. Session

Session是另一種記錄客戶狀態(tài)的機制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務器上。客戶端瀏覽器訪問服務器的時候,服務器把客戶端信息以某種形式記錄

在服務器上。這就是Session。客戶端瀏覽器再次訪問時只需要從該Session中查找該客戶的狀態(tài)就可以了。

每個用戶訪問服務器都會建立一個session,那服務器是怎么標識用戶的唯一身份呢?事實上,用戶與服務器建立連接的同時,服務器會自動為其分配一個SessionId。

①、我們需要知道:

1)SessionId的重要性:
  什么東西可以讓你每次請求都把SessionId自動帶到服務器呢?顯然就是cookie了,如果你想為用戶建立一次會話,可以在用戶授權成功時給他一個唯一的cookie。當一個用戶提交了表單時,瀏覽器會將用戶的SessionId自動附加在HTTP頭信息中,(這是瀏覽器的自動功能,用戶不會察覺到),當服務器處理完這個表單后,將結果返回給SessionId所對應的用戶。試想,如果沒有 SessionId,當有兩個用戶同時進行注冊時,服務器怎樣才能知道到底是哪個用戶提交了哪個表單呢。

2)儲存需要的信息。服務器通過SessionId作為key,讀寫到對應的value,這就達到了保持會話信息的目的。
  ②、session的創(chuàng)建:

當程序需要為某個客戶端的請求創(chuàng)建一個session時,服務器首先檢查這個客戶端的請求里是否已包含了sessionId,如果已包含則說明以前已經(jīng)為此客戶端創(chuàng)建過session,服務器就按照sessionId把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含sessionId,則為此客戶端創(chuàng)建一個session并且生成一個與此session相關聯(lián)的sessionId,sessionId的值是一個既不會重復,又不容易被找到規(guī)律以仿造的字符串,這個sessionId將被在本次響應中返回給客戶端保存。

③、禁用cookie和session共享

禁用cookie:如果客戶端禁用了cookie,通常有兩種方法實現(xiàn)session而不依賴cookie。1)URL重寫,就是把sessionId直接附加在URL路徑的后面。2)表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞回服務器。比如: <form name="testform" action="/xxx"> <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> <input type="text"> </form> Session共享: 對于多網(wǎng)站(同一父域不同子域)單服務器,我們需要解決的就是來自不同網(wǎng)站之間SessionId的共享。由于域名不同(aaa.test.com和bbb.test.com),而SessionId又分別儲存在各自的cookie中,因此服務器會認為對于兩個子站的訪問,是來自不同的會話。解決的方法是通過修改cookies的域名為父域名達到cookie共享的目的,從而實現(xiàn)SessionId的共享。帶來的弊端就是,子站間的cookie信息也同時被共享了。

四、總結:

  • 1、我們需要知道cookie在客戶端,session在服務端,cookie的產(chǎn)生是在服務端產(chǎn)生的
  • 2、cookie只是一個通行證,但并不是安全的,任何安全的校驗必須要在服務端上完成,cookie只是存在客戶端上面的一個唯一標識它且由服務端定制的信息,本地可以改,但是不管怎么改,最后還是需要把它拿上發(fā)送給服務端進行匹配校驗
  • 3、session和cookie的存儲都存在時效性,這是很有必要的
  • 4、單個cookie保存的數(shù)據(jù)不能超過4kb,很多瀏覽器都限制了一個站點最多保存20個cookie
  • 5、不管是cookie還是session,都是建立在安全性的大前提下,session中不僅僅有cookie的信息,同時會有該用戶的相關重要且安全的信息存儲,所以session是在服務器的,而cookie只是服務器將一些不重要的信息拿出來丟給客戶的存在,以備以后快速匹配校驗用。

總結

以上是生活随笔為你收集整理的浅谈Session与Cookie的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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