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