摘要:一般如果用戶輸入的中的路徑部分從第一個(gè)字符開始包含屬性所定義的字符串,瀏覽器就認(rèn)為通過檢查。表明只有當(dāng)瀏覽器和服務(wù)器之間的通信協(xié)議為加密認(rèn)證協(xié)議時(shí),瀏覽器才向服務(wù)器提交相應(yīng)的。在中,用于保存狀態(tài)以及為瀏覽器提供一種身份識(shí)別機(jī)制。
Cookie 是瀏覽器訪問服務(wù)器后,服務(wù)器傳給瀏覽器的一段數(shù)據(jù)。
cookie是http協(xié)議的一部分,當(dāng)客戶端第一次向服務(wù)器端發(fā)送請(qǐng)求的時(shí)候,服務(wù)器會(huì)向客戶端發(fā)送一個(gè) cookie,用來保存一些信息,當(dāng)客戶端下次在向同一個(gè)服務(wù)器發(fā)送請(qǐng)求的時(shí)候,服務(wù)器通過識(shí)別客戶端的cookie,做出相應(yīng)的動(dòng)作。比如我們登陸一個(gè)網(wǎng)站的時(shí)候,這個(gè)網(wǎng)站記錄我們的用戶名和密碼,下次登陸就不用再輸入用戶名和密碼就可以直接登錄了。
Web 服務(wù)器通過發(fā)送一個(gè) Set-Cookie 的 HTTP 消息頭來創(chuàng)建一個(gè) cookie,Set-Cookie消息頭是一個(gè)字符串,其格式如下:
Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
在chrome控制臺(tái)中,我們可以通過開發(fā)者工具來查看服務(wù)器響應(yīng)請(qǐng)求后發(fā)送給瀏覽器的http消息頭,從而看到set-cookie,具體步驟如下:F12打開開發(fā)者工具→Network
同樣在開發(fā)者工具中,可以通過Application查看服務(wù)器發(fā)送了哪些cookie:
NAME:cookie的名稱,value是設(shè)置的cookie的值。
Expires:確定Cookie有效終止日期,指定 cookie 在什么時(shí)候不會(huì)再被發(fā)送到服務(wù)器,在這個(gè)指定時(shí)間后瀏覽器將會(huì)刪除這個(gè) cookie。DATE屬性值必須按照特定的格式:Wdy(周幾), Date-Month-Year HH:MM:SS GMT ,如果不是這種格式將不會(huì)被識(shí)別。在沒有設(shè)置 expires 選項(xiàng)時(shí),cookie 的生命周期僅限于當(dāng)前會(huì)話中,關(guān)閉瀏覽器 cookie文件會(huì)自動(dòng)消失。
Path:控制 Cookie 消息頭的發(fā)送時(shí)機(jī),用戶請(qǐng)求資源 URL 中存在Path指定的路徑時(shí),Web服務(wù)器才會(huì)發(fā)送Cookie 消息頭。一般如果用戶輸入的URL中的路徑部分從第一個(gè)字符開始包含Path屬性所定義的字符串,瀏覽器就認(rèn)為通過檢查。如果Path屬性的值為“/”,則Web服務(wù)器上所有的WWW資源均可讀取該Cookie。如果沒有設(shè)置path選項(xiàng),則Path的屬性值默認(rèn)為Web服務(wù)器傳給瀏覽器的資源的路徑名。
Domain:確定哪些Internet域中的Web服務(wù)器可讀取瀏覽器所存取的Cookie,即只有來自這個(gè)域的頁(yè)面才可以使用Cookie中的信息。未設(shè)置Domain選項(xiàng)時(shí),設(shè)置Cookie的屬性值為該Web服務(wù)器的域名。
需要注意的是,只有在 domain 選項(xiàng)核實(shí)完畢之后才會(huì)對(duì) path 屬性進(jìn)行比較。
SECURE:只有標(biāo)記沒有值,只有當(dāng)一個(gè)請(qǐng)求通過 SSL 或 HTTPS 創(chuàng)建時(shí),包含 secure 選項(xiàng)的 cookie 才能被發(fā)送至服務(wù)器。表明只有當(dāng)瀏覽器和Web 服務(wù)器之間的通信協(xié)議為加密認(rèn)證協(xié)議時(shí),瀏覽器才向服務(wù)器提交相應(yīng)的Cookie。
在JavaScript中,cookie用于保存狀態(tài)以及為web瀏覽器提供一種身份識(shí)別機(jī)制。在 JavaScript 中我們可以通過 document.cookie 屬性來創(chuàng)建、維護(hù)和刪除 cookie 。
設(shè)置cookie:
document.cookie="userName = mavis ";
每個(gè)cookie都是一個(gè) name/value對(duì),若要一次設(shè)置多個(gè)name/value對(duì),可以用下面的方法:
document.cookie = "userName=mavis; userId = 023";
在cookie中,使用escape()函數(shù)進(jìn)行編碼,它能將一些特殊符號(hào)使用十六進(jìn)制表示,特殊符號(hào)有分號(hào)(;)、逗號(hào)(,)、等號(hào)(=)以及空格等。但是使用escape()編碼后,在取出值以后需要使用unescape()進(jìn)行解碼才能得到原來的cookie值。
JavaScript中escape() 函數(shù)可對(duì)字符串進(jìn)行編碼,這樣就可以在所有的計(jì)算機(jī)上讀取該字符串。語(yǔ)法如下:escape(string),string為要被轉(zhuǎn)義或編碼的字符串。
獲取cookie的值:
使用document.cookie可直接獲得由分號(hào)隔開的多個(gè)name/value(名/值)組成的字符串。這些名/值對(duì)包括該域名下的所有cookie。
var myCookie = document.cookie;
獲取指定的cookie值,
//設(shè)置兩個(gè)cookie document.cookie = "userName=mavis"; document.cookie = "userId = 023"; //獲取cookie字符串 var myCookie = document.cookie; var arrCookie = myCookie.split(";"); var userName; for(var i = 0;i < arrCookie.length;i++){ var myArr = arrCookie[i].split("="); //找到名稱為userName的cookie,并返回值 if(userName = myArr[0]){ userName = myArr[1]; break; } } alert("welcome " + userName);
設(shè)置cookie的有效終止日期:
當(dāng)我們第一次在某個(gè)網(wǎng)站登錄我們的ID是,有的網(wǎng)站會(huì)提醒是否保存該ID和密碼,在JavaScript中,實(shí)際上是給cookie設(shè)置一個(gè)有效日期:
document.cookie = "userId = 023; expiress = GMT_String";
這條語(yǔ)句是將userId這個(gè)cookie設(shè)置為GMT_String表示的過期時(shí)間,如果超過這個(gè)時(shí)間,cookie將會(huì)消失,不可以再被訪問。
設(shè)置cookie值在30天以后過期:
//獲取當(dāng)前時(shí)間 var date=new Date(); var expiresDays=30; //將date設(shè)置為30天以后的時(shí)間 date.setTime(date.getTime()+expiresDays*24*3600*1000); //將userId和userName兩個(gè)cookie設(shè)置為30天后過期 document.cookie = "userId = 023; userName = mavis; expires = " + date.toGMTString();
刪除cookie:
可將其有效終止日期設(shè)置為過去的時(shí)間:
var date=new Date(); //將date設(shè)置為過去的時(shí)間 date.setTime(date.getTime()-10000); document.cookie="userId=023; expires="+date.toGMTString();
這樣就可以把userId這個(gè)cookie刪除了。
指定可訪問cookie的路徑:通過設(shè)置path屬性來指定
//指定可訪問該cookie的目錄 document.cookie = "name = mavis; path = cookiePath" //在整個(gè)網(wǎng)站都可訪問 document.cookie = "name = mavis; path = /"
指定可訪問cookie的主機(jī)名:主機(jī)名是指同一個(gè)域下的不同主機(jī),一個(gè)主機(jī)中創(chuàng)建的cookie在另一個(gè)主機(jī)下是不能被訪問的,但可以通過domain參數(shù)來實(shí)現(xiàn)對(duì)其的控制。
如:document.cookie="name=value;domain=.baidu.com"; 這樣設(shè)置可使百度下的所有主機(jī)都可訪問該cookie。
一個(gè)例子:
function getCookie(name){ if (document.cookie.length>0){ start=document.cookie.indexOf(name + "=") if (start!=-1){ start=start + name.length+1 end=document.cookie.indexOf(";",start) if (end==-1) end=document.cookie.length return unescape(document.cookie.substring(start,end)) } } return "" } function setCookie(name,value,expiredays){ var exdate=new Date() exdate.setDate(exdate.getDate()+expiredays) document.cookie=name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) } setCookie("username","tank",1800); //設(shè)置cookie的值,生存時(shí)間半個(gè)小時(shí) alert(getCookie("test")); //取得cookie的值,顯示tank
但是在運(yùn)行的時(shí)候出了個(gè)問題,在我的chrome瀏覽器上不能顯示:
于是我上網(wǎng)查了以下原因,是因?yàn)閏hrome瀏覽器對(duì)cookie有限制,但是我給chrome瀏覽器的cookie已經(jīng)設(shè)置成“允許設(shè)置本地?cái)?shù)據(jù)”,但還是不行。看到這篇文章的大神,誰(shuí)能給我講講這是為啥嗎?感激不盡。
在edge瀏覽器上顯示出來是這樣的:
最后,路過的大神們,求你們幫忙解答一下chrome上不能執(zhí)行的問題,謝謝啦~~~~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80939.html
摘要:一般如果用戶輸入的中的路徑部分從第一個(gè)字符開始包含屬性所定義的字符串,瀏覽器就認(rèn)為通過檢查。表明只有當(dāng)瀏覽器和服務(wù)器之間的通信協(xié)議為加密認(rèn)證協(xié)議時(shí),瀏覽器才向服務(wù)器提交相應(yīng)的。在中,用于保存狀態(tài)以及為瀏覽器提供一種身份識(shí)別機(jī)制。 Cookie 是瀏覽器訪問服務(wù)器后,服務(wù)器傳給瀏覽器的一段數(shù)據(jù)。cookie是http協(xié)議的一部分,當(dāng)客戶端第一次向服務(wù)器端發(fā)送請(qǐng)求的時(shí)候,服務(wù)器會(huì)向客戶端發(fā)...
摘要:希望幫助更多的前端愛好者學(xué)習(xí)。前端開發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實(shí)踐譯者張捷滬江前端開發(fā)工程師當(dāng)你問起有關(guān)與時(shí),老司機(jī)們首先就會(huì)告訴你其實(shí)是個(gè)沒有網(wǎng)絡(luò)請(qǐng)求功能的庫(kù)。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學(xué)習(xí) React.js 比你想象的要簡(jiǎn)單 原文地址:Learning React.js is easier than you think 原文作...
摘要:本文章屬于爬蟲入門到精通系統(tǒng)教程第七講直接開始案例吧。本次我們實(shí)現(xiàn)如何模擬登陸知乎。 本文章屬于爬蟲入門到精通系統(tǒng)教程第七講 直接開始案例吧。 本次我們實(shí)現(xiàn)如何模擬登陸知乎。 1.抓包 首先打開知乎登錄頁(yè) 知乎 - 與世界分享你的知識(shí)、經(jīng)驗(yàn)和見解 注意打開開發(fā)者工具后點(diǎn)擊preserve log,密碼記得故意輸入錯(cuò)誤,然后點(diǎn)擊登錄 showImg(https://segmentfaul...
摘要:每天的內(nèi)容跑起來模板引擎表單文件上傳郵件發(fā)送一框架的簡(jiǎn)介模型負(fù)責(zé)數(shù)據(jù)的操作視圖負(fù)責(zé)數(shù)據(jù)的展示控制器控制你的的操作以及視圖模板的渲染在中叫做模型負(fù)責(zé)數(shù)據(jù)的操作控制你的的操作以及視圖模板的渲染業(yè)務(wù)邏輯的操作模板負(fù)責(zé)數(shù)據(jù)的展示二架構(gòu)三概念是 flask 每天的內(nèi)容 flask跑起來 模板引擎 flask表單 文件上傳郵件發(fā)送 flask-sqlalchemy 一、web框架的簡(jiǎn)介 M ...
摘要:概念表達(dá)式全名為,就是為了替代腳本表達(dá)式。作用獲取數(shù)據(jù)表達(dá)式主要用于替換頁(yè)面中的腳本表達(dá)式,以從各種類型的域中檢索對(duì)象獲取數(shù)據(jù)。調(diào)用方法表達(dá)式允許用戶開發(fā)自定義函數(shù),以在頁(yè)面中通過表達(dá)式調(diào)用類的方法。 概念 EL表達(dá)式:EL 全名為Expression Language,就是為了替代腳本表達(dá)式。 作用 獲取數(shù)據(jù):EL表達(dá)式主要用于替換JSP頁(yè)面中的腳本表達(dá)式,以從各種類型的web域中...
閱讀 707·2023-04-25 22:50
閱讀 1541·2021-10-08 10:05
閱讀 990·2021-09-30 09:47
閱讀 1926·2021-09-28 09:35
閱讀 830·2021-09-26 09:55
閱讀 3424·2021-09-10 10:51
閱讀 3436·2021-09-02 15:15
閱讀 3304·2021-08-05 09:57