摘要:于是和就出現(xiàn)了,用于在端和端來分別維護我是誰的狀態(tài)。這種做法就是協(xié)議本身支持狀態(tài)。每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以后的消費相聯(lián)系起來。所以兩者的作用域不一樣。因此才會出現(xiàn)這種情況。
1、Cookie
Cookie 是瀏覽器訪問服務(wù)器后,服務(wù)器傳給瀏覽器的一段數(shù)據(jù)
該數(shù)據(jù)以一個稱為“Set-Cookie”的 HTTP 報頭格式從 Web 服務(wù)器發(fā)出。 瀏覽器以稱為“Cookie”的 HTTP 報頭格式將 Cookie 送回服務(wù)器
Cookie 在瀏覽器端是以文件形式保存的
此后每次瀏覽器訪問該服務(wù)器,都必須帶上這段數(shù)據(jù)
包含多個字段 "過期時間"、"路徑"、"域名"
Cookie 是在客戶端保持狀態(tài)的方案,補充 HTTP 無狀態(tài)協(xié)議的特點
2、SessionSession 是在服務(wù)端保持狀態(tài)的方案
用戶打開瀏覽器訪問網(wǎng)站,服務(wù)端生成的sessionID,傳遞到瀏覽器的 Cookie 保存 ,在每次請求時都會自動帶上 sessionID ,然后服務(wù)器端根據(jù) sessionID 找到對應(yīng)的 Session 值
3、HTTP協(xié)議上文有提到 Cookie 與 Session 都產(chǎn)生于用來解決 HTTP 協(xié)議的無狀態(tài),無連接的特點,那么到底什么可以被稱作“無狀態(tài)”呢?
于是我們可以簡單整理一下通信的過程(見下圖),位于應(yīng)用層以下的TCP/IP協(xié)議對數(shù)據(jù)的層層封裝,使得我們從一個客戶端到服務(wù)端(或者可以說另一個客戶端)的數(shù)據(jù)交換看起來是端到端的,隱藏一層又一層的數(shù)據(jù)封裝和校驗。
那么,“無狀態(tài)”在這個模型中到底體現(xiàn)在什么地方呢?粗略的可以理解為【C端是一個求愛者,S端是一個人見人愛的女神】,
我從C端給S端發(fā)了一句“你喜歡我嗎”,
S端回復(fù)了一句“喜歡呀”,
C端再問“你喜歡我什么”
S端卻回了一句“我什么時候喜歡你了”
......
其實我意在說明,“無狀態(tài)”即為無感情,無上下文,是一次匿名的交互,寫這個前看了許多文章中,把“無狀態(tài)”歸為HTTP協(xié)議的_缺陷_,但是我覺得更是一種_特點_,從WIKI百科的描述中可以見到這句話
High-traffic websites often benefit from web cache servers that deliver content on behalf of upstream servers to improve response time
可以將其理解為,HTTP協(xié)議為“高速通信”帶來了好處,也是歷史選擇了這種機制。但是隨著發(fā)展,我們需要不能再匿名的去交流,我們需要知道對方是誰,我們期待下面的對話場景:
C端:“你喜歡我嗎”
S端:“喜歡你啊”
C端:“喜歡我什么”
S端:“所有”
......
emmmmmm...這可能是我們想要的效果,我們需要知道對方是誰,知道上下文是什么,需要維護對方是誰的這個_狀態(tài)_。于是 Cookie 和 Session 就出現(xiàn)了,用于在C端和S端來分別維護“我是誰”的狀態(tài)。
如果想聽更好的故事,下面的可能更加的奏效
常去的一家咖啡店有喝5杯咖啡免費贈一杯咖啡的優(yōu)惠,然而一次性消費5杯咖啡的機會微乎其微,這時就需要某種方式來紀(jì)錄某位顧客的消費數(shù)量。想象一下其實也無外乎下面的幾種方案:4、Cookie 與 Session 的關(guān)系
1、該店的店員很厲害,能記住每位顧客的消費數(shù)量,只要顧客一走進咖啡店,店員就知道該怎么對待了。這種做法就是協(xié)議本身支持狀態(tài)。
2、發(fā)給顧客一張卡片,上面記錄著消費的數(shù)量,一般還有個有效期限。每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以后的消費相聯(lián)系起來。這種做法就是在客戶端保持狀態(tài)。
3、發(fā)給顧客一張會員卡,除了卡號之外什么信息也不紀(jì)錄,每次消費時,如果顧客出示該卡片,則店員在店里的紀(jì)錄本上找到這個卡號對應(yīng)的紀(jì)錄添加一些消費信息。這種做法就是在服務(wù)器端保持狀態(tài)。
先引用一句WIKI 上在介紹Session時候?qū)ookie的解釋吧
Client-side sessions use cookies and cryptographic techniques to maintain state without storing as much data on the server. When presenting a dynamic web page, the server sends the current state data to the client (web browser) in the form of a cookie. The client saves the cookie in memory or on disk. With each successive request, the client sends the cookie back to the server, and the server uses the data to "remember" the state of the application for that specific client and generate an appropriate response.
我就翻譯第一句話吧. 客戶端session使用cookie和加密技術(shù)來保持狀態(tài)
可以很容易的發(fā)現(xiàn),他們的作用大致一樣,存儲位置不同,
下面再用一段PHP程序來解釋吧
后端代碼:
第一次訪問;
$_COOKIE并沒有值第二次訪問:
$_COOKIE有值了所以可以很明顯的看出,setcookie()對于 $_COOKIE 的影響并不是立即生效的.這是因為setcookie()是用來給客戶端發(fā)送一個HTTP Cookie 的值, 但是 $_COOKIE 則是來獲取客戶端傳遞的 Cookie 值。所以兩者的作用域不一樣。因此才會出現(xiàn)這種情況。
5、寫在最后關(guān)于 Session 和 Cookie 的理解就到此為止,我覺得應(yīng)該設(shè)計到更多知識,包括但不限于瀏覽器的運行機制,Cookie 實現(xiàn)機制, Session 持久化,php.ini 對session的影響etc.
如果有不對的地方,記得來交互意見 :)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28530.html
目錄 前言 一、 什么是指針? 引例 計算機是怎么對內(nèi)存單元編號的呢? 內(nèi)存空間的地址如何得到 想存地址怎么辦? ? 本質(zhì)目的不是為了存地址 ?二、指針和指針類型 為什么有不同類型的指針 1.指針的解引用 2.指針+-整數(shù) 三、野指針 造成野指針的原因 1.未主動初始化指針 ?2.指針越界訪問 3.指針指向的空間釋放 規(guī)避野指針 四、指針運算 1.指針+-整數(shù) ?2.指針-指針 ?3.指針的關(guān)系運...
摘要:繼續(xù)嘗試,成功,但是還是未登錄狀態(tài)。如前所說,用模擬登錄拿到,然后帶上去取文章備份就好了,用加了點并發(fā),代碼放到上了,地址,歡迎使用及拍磚以上 直接post登錄失敗 一般的網(wǎng)站確實直接post之后就登錄成功了,然后拿到cookie想怎么玩就怎么玩。不過的確世事難料,失敗在所難免。 首先是人肉登錄,用chrome的network欄查看post了些什么東西,有三項: mail passw...
摘要:是什么呀是一個和不太一樣的數(shù)據(jù)庫。懷疑是同時聯(lián)了四個集合的數(shù)據(jù)造成的。這本書的定位是和的應(yīng)用,所以有意弱化了數(shù)據(jù)庫的搭建維護和底層優(yōu)化。所以本書可能不適合數(shù)據(jù)庫工程師。 這篇文章沒有代碼,請放心閱讀。 程序員最寶貴的東西是生命,生命屬于程序員只有一次。一個程序員的一生應(yīng)該這樣度過:當(dāng)她回首往事的時候,她不會因為搭建環(huán)境浪費時間而悔恨,也不會因為集群無法運行而羞恥。這樣,在她開發(fā)的時候,...
閱讀 2260·2023-04-25 14:50
閱讀 1233·2021-10-13 09:50
閱讀 1866·2019-08-30 15:56
閱讀 1839·2019-08-29 15:29
閱讀 2886·2019-08-29 15:27
閱讀 3548·2019-08-29 15:14
閱讀 1192·2019-08-29 13:01
閱讀 3299·2019-08-26 14:06