摘要:一般如果用戶輸入的中的路徑部分從第一個字符開始包含屬性所定義的字符串,瀏覽器就認為通過檢查。表明只有當瀏覽器和服務器之間的通信協議為加密認證協議時,瀏覽器才向服務器提交相應的。在中,用于保存狀態以及為瀏覽器提供一種身份識別機制。
Cookie 是瀏覽器訪問服務器后,服務器傳給瀏覽器的一段數據。
cookie是http協議的一部分,當客戶端第一次向服務器端發送請求的時候,服務器會向客戶端發送一個 cookie,用來保存一些信息,當客戶端下次在向同一個服務器發送請求的時候,服務器通過識別客戶端的cookie,做出相應的動作。比如我們登陸一個網站的時候,這個網站記錄我們的用戶名和密碼,下次登陸就不用再輸入用戶名和密碼就可以直接登錄了。
Web 服務器通過發送一個 Set-Cookie 的 HTTP 消息頭來創建一個 cookie,Set-Cookie消息頭是一個字符串,其格式如下:
Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
在chrome控制臺中,我們可以通過開發者工具來查看服務器響應請求后發送給瀏覽器的http消息頭,從而看到set-cookie,具體步驟如下:F12打開開發者工具→Network
同樣在開發者工具中,可以通過Application查看服務器發送了哪些cookie:
NAME:cookie的名稱,value是設置的cookie的值。
Expires:確定Cookie有效終止日期,指定 cookie 在什么時候不會再被發送到服務器,在這個指定時間后瀏覽器將會刪除這個 cookie。DATE屬性值必須按照特定的格式:Wdy(周幾), Date-Month-Year HH:MM:SS GMT ,如果不是這種格式將不會被識別。在沒有設置 expires 選項時,cookie 的生命周期僅限于當前會話中,關閉瀏覽器 cookie文件會自動消失。
Path:控制 Cookie 消息頭的發送時機,用戶請求資源 URL 中存在Path指定的路徑時,Web服務器才會發送Cookie 消息頭。一般如果用戶輸入的URL中的路徑部分從第一個字符開始包含Path屬性所定義的字符串,瀏覽器就認為通過檢查。如果Path屬性的值為“/”,則Web服務器上所有的WWW資源均可讀取該Cookie。如果沒有設置path選項,則Path的屬性值默認為Web服務器傳給瀏覽器的資源的路徑名。
Domain:確定哪些Internet域中的Web服務器可讀取瀏覽器所存取的Cookie,即只有來自這個域的頁面才可以使用Cookie中的信息。未設置Domain選項時,設置Cookie的屬性值為該Web服務器的域名。
需要注意的是,只有在 domain 選項核實完畢之后才會對 path 屬性進行比較。
SECURE:只有標記沒有值,只有當一個請求通過 SSL 或 HTTPS 創建時,包含 secure 選項的 cookie 才能被發送至服務器。表明只有當瀏覽器和Web 服務器之間的通信協議為加密認證協議時,瀏覽器才向服務器提交相應的Cookie。
在JavaScript中,cookie用于保存狀態以及為web瀏覽器提供一種身份識別機制。在 JavaScript 中我們可以通過 document.cookie 屬性來創建、維護和刪除 cookie 。
設置cookie:
document.cookie="userName = mavis ";
每個cookie都是一個 name/value對,若要一次設置多個name/value對,可以用下面的方法:
document.cookie = "userName=mavis; userId = 023";
在cookie中,使用escape()函數進行編碼,它能將一些特殊符號使用十六進制表示,特殊符號有分號(;)、逗號(,)、等號(=)以及空格等。但是使用escape()編碼后,在取出值以后需要使用unescape()進行解碼才能得到原來的cookie值。
JavaScript中escape() 函數可對字符串進行編碼,這樣就可以在所有的計算機上讀取該字符串。語法如下:escape(string),string為要被轉義或編碼的字符串。
獲取cookie的值:
使用document.cookie可直接獲得由分號隔開的多個name/value(名/值)組成的字符串。這些名/值對包括該域名下的所有cookie。
var myCookie = document.cookie;
獲取指定的cookie值,
//設置兩個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);
設置cookie的有效終止日期:
當我們第一次在某個網站登錄我們的ID是,有的網站會提醒是否保存該ID和密碼,在JavaScript中,實際上是給cookie設置一個有效日期:
document.cookie = "userId = 023; expiress = GMT_String";
這條語句是將userId這個cookie設置為GMT_String表示的過期時間,如果超過這個時間,cookie將會消失,不可以再被訪問。
設置cookie值在30天以后過期:
//獲取當前時間 var date=new Date(); var expiresDays=30; //將date設置為30天以后的時間 date.setTime(date.getTime()+expiresDays*24*3600*1000); //將userId和userName兩個cookie設置為30天后過期 document.cookie = "userId = 023; userName = mavis; expires = " + date.toGMTString();
刪除cookie:
可將其有效終止日期設置為過去的時間:
var date=new Date(); //將date設置為過去的時間 date.setTime(date.getTime()-10000); document.cookie="userId=023; expires="+date.toGMTString();
這樣就可以把userId這個cookie刪除了。
指定可訪問cookie的路徑:通過設置path屬性來指定
//指定可訪問該cookie的目錄 document.cookie = "name = mavis; path = cookiePath" //在整個網站都可訪問 document.cookie = "name = mavis; path = /"
指定可訪問cookie的主機名:主機名是指同一個域下的不同主機,一個主機中創建的cookie在另一個主機下是不能被訪問的,但可以通過domain參數來實現對其的控制。
如:document.cookie="name=value;domain=.baidu.com"; 這樣設置可使百度下的所有主機都可訪問該cookie。
一個例子:
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); //設置cookie的值,生存時間半個小時 alert(getCookie("test")); //取得cookie的值,顯示tank
但是在運行的時候出了個問題,在我的chrome瀏覽器上不能顯示:
于是我上網查了以下原因,是因為chrome瀏覽器對cookie有限制,但是我給chrome瀏覽器的cookie已經設置成“允許設置本地數據”,但還是不行。看到這篇文章的大神,誰能給我講講這是為啥嗎?感激不盡。
在edge瀏覽器上顯示出來是這樣的:
最后,路過的大神們,求你們幫忙解答一下chrome上不能執行的問題,謝謝啦~~~~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80939.html
摘要:本文章屬于爬蟲入門到精通系統教程第七講直接開始案例吧。本次我們實現如何模擬登陸知乎。 本文章屬于爬蟲入門到精通系統教程第七講 直接開始案例吧。 本次我們實現如何模擬登陸知乎。 1.抓包 首先打開知乎登錄頁 知乎 - 與世界分享你的知識、經驗和見解 注意打開開發者工具后點擊preserve log,密碼記得故意輸入錯誤,然后點擊登錄 showImg(https://segmentfaul...
摘要:每天的內容跑起來模板引擎表單文件上傳郵件發送一框架的簡介模型負責數據的操作視圖負責數據的展示控制器控制你的的操作以及視圖模板的渲染在中叫做模型負責數據的操作控制你的的操作以及視圖模板的渲染業務邏輯的操作模板負責數據的展示二架構三概念是 flask 每天的內容 flask跑起來 模板引擎 flask表單 文件上傳郵件發送 flask-sqlalchemy 一、web框架的簡介 M ...
摘要:概念表達式全名為,就是為了替代腳本表達式。作用獲取數據表達式主要用于替換頁面中的腳本表達式,以從各種類型的域中檢索對象獲取數據。調用方法表達式允許用戶開發自定義函數,以在頁面中通過表達式調用類的方法。 概念 EL表達式:EL 全名為Expression Language,就是為了替代腳本表達式。 作用 獲取數據:EL表達式主要用于替換JSP頁面中的腳本表達式,以從各種類型的web域中...
閱讀 685·2023-04-25 22:50
閱讀 1525·2021-10-08 10:05
閱讀 983·2021-09-30 09:47
閱讀 1913·2021-09-28 09:35
閱讀 815·2021-09-26 09:55
閱讀 3405·2021-09-10 10:51
閱讀 3426·2021-09-02 15:15
閱讀 3290·2021-08-05 09:57