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