摘要:可選項(xiàng)部分只會(huì)在瀏覽器端使用,而不會(huì)被發(fā)送至服務(wù)器端。包括過(guò)期時(shí)間選項(xiàng),過(guò)期時(shí)間選項(xiàng)過(guò)期時(shí)間,指定了何時(shí)不會(huì)再被發(fā)送至服務(wù)器,隨后瀏覽器將刪除該。
瀏覽器和Webserver之間的關(guān)系,被設(shè)計(jì)為無(wú)狀態(tài)的,這是一個(gè)很重要的設(shè)計(jì),可以讓客戶(hù)端無(wú)需和服務(wù)器保持狀態(tài),節(jié)省寶貴的端口資源,從而可以為更多的客戶(hù)鏈接服務(wù)。
但是這樣帶來(lái)了問(wèn)題,簡(jiǎn)言之,服務(wù)器無(wú)法知道兩個(gè)請(qǐng)求是否來(lái)自于同一個(gè)瀏覽器。然而,在頁(yè)面訪(fǎng)問(wèn)計(jì)數(shù),購(gòu)物車(chē)等應(yīng)用中,服務(wù)器是需要區(qū)分不同的瀏覽器的,比如客戶(hù)瀏覽器1放置到購(gòu)物車(chē)內(nèi)的商品,和客戶(hù)2瀏覽器的不可以混雜在一起。
辦法是有的。比如在請(qǐng)求的頁(yè)面中插入一個(gè) token,然后在下次請(qǐng)求時(shí)將這個(gè) token 返回至服務(wù)器??梢园裻oken放到form內(nèi)或者URL參數(shù)內(nèi)。
但是被廣為接受的是Cookie方法。cookie就是根據(jù)服務(wù)器響應(yīng)頭的指示,瀏覽器保存的一段文本。并在隨后的請(qǐng)求中將這些信息發(fā)送至Web服務(wù)器,Web服務(wù)器就可以使用這些信息來(lái)識(shí)別不同的用戶(hù)。
具體做法就是:
服務(wù)器可以為來(lái)訪(fǎng)的瀏覽器設(shè)置一個(gè)值,這個(gè)通過(guò)response內(nèi)的Set-Cookie來(lái)實(shí)現(xiàn)
瀏覽器記住這個(gè)值,并且每次訪(fǎng)問(wèn)服務(wù)器時(shí),發(fā)送此值過(guò)來(lái)??梢詮膔equest內(nèi)的Cookie值承載
演示如下代碼使用express.js,演示了一個(gè)訪(fǎng)問(wèn)計(jì)數(shù)的服務(wù):
const express = require("express") const app = express() app.get("/", (req, res) => { var count = req.header("Cookie") if (!count){ count = 0 } count = parseInt(count) + 1 res.setHeader("Set-Cookie",count) res.send("Your Visit page count:" + count) }) app.get("/reset", (req, res) => { res.setHeader("Set-Cookie",0) res.send("Your Visit page count:" + 0) }) app.listen(3000, () => console.log("Example app listening on port 3000!"))
可以打開(kāi)瀏覽器,比如chrome,訪(fǎng)問(wèn)localhost:3000,每次刷新,可以看到:
Your Visit page count:0
的數(shù)字加1。
可以再打開(kāi)另外一個(gè)和chrome不同的瀏覽器,比如safari,訪(fǎng)問(wèn)localhost:3000,每次刷新,可以看到:
Your Visit page count:0
的數(shù)字加1。這兩個(gè)加1的動(dòng)作,兩個(gè)瀏覽器各自加各自的,互相并不影響。
創(chuàng)建 cookie通過(guò)發(fā)送一個(gè)稱(chēng)為Set-Cookie的HTTP 消息頭來(lái)創(chuàng)建一個(gè) cookie,格式如下:
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
消息頭的第一部分,value 部分,可以是任意字符串。但是通常是一個(gè)name=value格式的字符串。
可選項(xiàng)部分只會(huì)在瀏覽器端使用,而不會(huì)被發(fā)送至服務(wù)器端。包括過(guò)期時(shí)間選項(xiàng),
過(guò)期時(shí)間選項(xiàng)過(guò)期時(shí)間(expires),指定了 cookie 何時(shí)不會(huì)再被發(fā)送至服務(wù)器,隨后瀏覽器將刪除該 cookie。該選項(xiàng)的值是一個(gè) Wdy, DD-Mon-YYYY HH:MM:SS GMT 日期格式的值
expires=Sat, 02 May 2009 23:38:25 GMT
如果 expires 設(shè)置了一個(gè)過(guò)去的時(shí)間點(diǎn),那么這個(gè) cookie 會(huì)被立即刪掉。沒(méi)有設(shè)置 expires 選項(xiàng)時(shí),cookie 的生命周期僅限于當(dāng)前會(huì)話(huà)中,關(guān)閉瀏覽器意味著這次會(huì)話(huà)的結(jié)束,
domain 選項(xiàng)指定了 cookie 將要被發(fā)送至哪個(gè)或哪些域中。默認(rèn)情況下,domain 會(huì)被設(shè)置為創(chuàng)建該 cookie 的頁(yè)面所在的域名,所以當(dāng)給相同域名發(fā)送請(qǐng)求時(shí)該 cookie 會(huì)被發(fā)送至服務(wù)器。例如,本博中 cookie 的默認(rèn)值將是 bubkoo.com。domain 選項(xiàng)可用來(lái)擴(kuò)充 cookie 可發(fā)送域的數(shù)量,Yahoo! 這種大型網(wǎng)站,都會(huì)有許多 *.yahoo.com 形式的站點(diǎn)(例如:my.yahoo.com, finance.yahoo.com 等等)。將一個(gè) cookie 的 domain 選項(xiàng)設(shè)置為 yahoo.com,就可以將該 cookie 的值發(fā)送至所有這些站點(diǎn)。
path 選項(xiàng)另一個(gè)控制 Cookie 消息頭發(fā)送時(shí)機(jī)的選項(xiàng)是 path 選項(xiàng),和 domain 選項(xiàng)類(lèi)似,path 選項(xiàng)指定了請(qǐng)求的資源 URL 中必須存在指定的路徑時(shí),才會(huì)發(fā)送Cookie 消息頭。這個(gè)比較通常是將 path 選項(xiàng)的值與請(qǐng)求的 URL 從頭開(kāi)始逐字符比較完成的。如果字符匹配,則發(fā)送 Cookie 消息頭:
path=/blog
在這個(gè)例子中,path 選項(xiàng)值會(huì)與 /blog,/blogrool 等等相匹配;任何以 /blog 開(kāi)頭的選項(xiàng)都是合法的。
secure 選項(xiàng)只有當(dāng)一個(gè)請(qǐng)求通過(guò) SSL 或 HTTPS 創(chuàng)建時(shí),包含 secure 選項(xiàng)的 cookie 才能被發(fā)送至服務(wù)器。例如:
Set-Cookie: value; secure
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/93804.html
摘要:兩個(gè)域之間是不是存在跨域問(wèn)題,主要是根據(jù)協(xié)議域名端口號(hào)這三個(gè)點(diǎn)進(jìn)行判斷,只要有一個(gè)不一樣就是跨域。例如協(xié)議不同與域名不同與端口號(hào)不同與瀏覽器默認(rèn)情況下無(wú)法主動(dòng)跨域向后端發(fā)送,需要在前端請(qǐng)求時(shí)加入配置項(xiàng)。據(jù)此,可以實(shí)現(xiàn)單點(diǎn)登錄。 cookie是什么 cookie的英文意思是餅干。在計(jì)算機(jī)術(shù)語(yǔ)中指服務(wù)端存放在客戶(hù)端的一段數(shù)據(jù)。這段數(shù)據(jù)在客戶(hù)端每次進(jìn)行http請(qǐng)求時(shí)會(huì)自動(dòng)加在http請(qǐng)求報(bào)文...
摘要:兩個(gè)域之間是不是存在跨域問(wèn)題,主要是根據(jù)協(xié)議域名端口號(hào)這三個(gè)點(diǎn)進(jìn)行判斷,只要有一個(gè)不一樣就是跨域。例如協(xié)議不同與域名不同與端口號(hào)不同與瀏覽器默認(rèn)情況下無(wú)法主動(dòng)跨域向后端發(fā)送,需要在前端請(qǐng)求時(shí)加入配置項(xiàng)。據(jù)此,可以實(shí)現(xiàn)單點(diǎn)登錄。 cookie是什么 cookie的英文意思是餅干。在計(jì)算機(jī)術(shù)語(yǔ)中指服務(wù)端存放在客戶(hù)端的一段數(shù)據(jù)。這段數(shù)據(jù)在客戶(hù)端每次進(jìn)行http請(qǐng)求時(shí)會(huì)自動(dòng)加在http請(qǐng)求報(bào)文...
摘要:于是和就出現(xiàn)了,用于在端和端來(lái)分別維護(hù)我是誰(shuí)的狀態(tài)。這種做法就是協(xié)議本身支持狀態(tài)。每次消費(fèi)時(shí),如果顧客出示這張卡片,則此次消費(fèi)就會(huì)與以前或以后的消費(fèi)相聯(lián)系起來(lái)。所以?xún)烧叩淖饔糜虿灰粯?。因此才?huì)出現(xiàn)這種情況。 1、Cookie Cookie 是瀏覽器訪(fǎng)問(wèn)服務(wù)器后,服務(wù)器傳給瀏覽器的一段數(shù)據(jù) 該數(shù)據(jù)以一個(gè)稱(chēng)為Set-Cookie的 HTTP 報(bào)頭格式從 Web 服務(wù)器發(fā)出。 瀏覽器以稱(chēng)為...
摘要:根據(jù)提供的超級(jí)全局?jǐn)?shù)組來(lái)創(chuàng)建實(shí)例上面的代碼有一處需要額外解釋一下,自開(kāi)始內(nèi)建的可以通過(guò)命令行解釋器來(lái)啟動(dòng),例如但是內(nèi)建有一個(gè)是將和這兩個(gè)請(qǐng)求首部存儲(chǔ)到了和中,為了統(tǒng)一內(nèi)建服務(wù)器和真正的中的請(qǐng)求首部字段所以在這里做了特殊處理。 Request 很多框架都會(huì)將來(lái)自客戶(hù)端的請(qǐng)求抽象成類(lèi)方便應(yīng)用程序使用,在Laravel中也不例外。IlluminateHttpRequest類(lèi)在Laravel框...
摘要:瀏覽器的同源策略瀏覽器所遵守的同源策略是指限制不同源之間執(zhí)行特定操作。這正是同源策略想要規(guī)避的安全隱患。目前為止,你已經(jīng)充分了解同源策略這個(gè)主題。 我們之前提到過(guò),AJAX技術(shù)使開(kāi)發(fā)者能夠?qū)W⒂诨ヂ?lián)網(wǎng)中數(shù)據(jù)的傳輸,而不再拘泥于數(shù)據(jù)傳輸?shù)妮d體。通過(guò)AJAX技術(shù),我們獲取數(shù)據(jù)的方式變得更加靈活,可控和優(yōu)雅。 但是AJAX技術(shù)并不是一把萬(wàn)能鑰匙,互聯(lián)網(wǎng)中的數(shù)據(jù)隱私和數(shù)據(jù)安全(例如你的銀行賬號(hào)...
閱讀 2895·2021-09-02 15:11
閱讀 993·2019-08-26 18:18
閱讀 1963·2019-08-26 11:57
閱讀 3418·2019-08-23 16:59
閱讀 2087·2019-08-23 16:51
閱讀 2391·2019-08-23 16:11
閱讀 3270·2019-08-23 14:58
閱讀 1192·2019-08-23 11:34