Javascript中Cookie的獲取和保存應(yīng)用案例
在之前的博客介紹了如何利用 Selenium去搭建 cookie池,進(jìn)行自動化登錄、獲取信息等。那什么是cookie呢?它的作用又是什么呢? 這里,再重復(fù)簡單介紹一下。
cookie 是瀏覽器儲存在用戶電腦上的一小段文本文件。該文件里存了加密后的用戶信息,過期時間等,且每次請求都會帶上 cookie。用戶在下次訪問的時候,就會把本地的cookie文件加上url一起發(fā)送給服務(wù)器,服務(wù)器以此來判斷用戶的狀態(tài)。由于cookie容量有限,只有4kb,有時候不可能將所有的用戶信息都存到里面,因此 session可以解決這個問題,服務(wù)器通過身份信息在 session中查詢用戶的其他信息,這樣我們的所有操作都會被保留。以下舉一個例子演示怎樣設(shè)置session。
import requests session = requests.Session() headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36' } // 設(shè)置 session 的全局 headers session.headers.update(headers) // 默認(rèn)使用全局的 headers session.get('https://passport.vip.com/') //自定義 headers custom_headers = { 'referer': 'https://passport.vip.com/' } // 既有全局的 user-agent 也有自定義的 referer session.get('https://passport.vip.com/', headers=custom_headers)
在講解Cookie的獲取和保存應(yīng)用前,簡單介紹一下 cookie在瀏覽器的基本結(jié)構(gòu)組成。
可見,主要組成部分為 Name-Value 鍵值對 和 Expires 這個生命周期,也就是失效的時間。
獲取 cookie : 通過 Document 對象 document.cookie創(chuàng)建和讀取后,以分號 ; split 成一個數(shù)組,再通過 for 循環(huán),添加判斷條件,當(dāng)查找到對應(yīng)的 name 后,返回對應(yīng)的用戶名。如果找不到,返回空值。
function getCookie(cname) { var name = cname + '='; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { if (ca[i].indexOf(name) >= 0) { return ca[i].split('=')[1]; } } return ''; }
保存、設(shè)置 cookie : 創(chuàng)建一個標(biāo)準(zhǔn)的中國時間對象,再通過 setTime() 方法,設(shè)置cookie的生命周期,其中 getTime() 就是把時間對象轉(zhuǎn)變成格林威治的時間戳(單位為毫秒),最后把時間戳通過 toGMTString()方法轉(zhuǎn)成 GMT的標(biāo)準(zhǔn)時間。
function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); var expires = 'expires=' + d.toGMTString(); document.cookie = cname + '=' + cvalue + ';' + expires; }
校檢 cookie : 通過回調(diào)函數(shù) getCookie() 和 setCookie() ,添加判斷條件,當(dāng)檢測到 Local cookie,就會自動彈出歡迎的提示框,否則就要輸入用戶名,保存到 cookie里。
function checkCookie() { var user = getCookie('username'); if (user) { alert('歡迎 ' + user + ' 再次訪問'); } else { user = prompt('請輸入你的名字:'); if (user) { setCookie('username', user, 8); } } }
最后,通過 window.onload 頁面加載后,執(zhí)行回調(diào)函數(shù) checkCookie()
window.onload = function () { checkCookie(); };
完整的代碼如下:
<script> window.onload = function () { checkCookie(); }; function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); var expires = 'expires=' + d.toGMTString(); document.cookie = cname + '=' + cvalue + ';' + expires; } function getCookie(cname) { var name = cname + '='; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { if (ca[i].indexOf(name) >= 0) { return ca[i].split('=')[1]; } } return ''; } function checkCookie() { var user = getCookie('username'); if (user) { alert('歡迎 ' + user + ' 再次訪問'); } else { user = prompt('請輸入你的名字:'); if (user) { setCookie('username', user, 8); } } } </script>
測試演示: 例如當(dāng)首次登錄界面后,輸入用戶名
可見,剛才測試輸入的用戶名以及 Expires 都成功添加到 cookies,用戶有效的生命周期為 8天,那就是剛才函數(shù) setCookie() 里面的第3個參數(shù)。
在不刪除 cookie的情況下,把瀏覽器關(guān)掉,再重新打開時,由于系統(tǒng)檢測到本地 cookie 有相對應(yīng)的用戶名,因此會自動執(zhí)行 checkCookie() 里的 alert() 函數(shù)內(nèi)容,那就是彈窗語句。
總結(jié)
到此這篇關(guān)于Javascript中Cookie的獲取和保存應(yīng)用的文章就介紹到這了,更多相關(guān)js Cookie獲取和保存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
gulp-htmlmin壓縮html的gulp插件實(shí)例代碼
這篇文章主要介紹了gulp-htmlmin壓縮html的gulp插件實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-06-06Js中將Long轉(zhuǎn)換成日期格式的實(shí)現(xiàn)方法
這篇文章主要介紹了Js中將Long轉(zhuǎn)換成日期格式的實(shí)現(xiàn)方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06利用JS解決ie6不支持max-width,max-height問題的方法
本篇文章主要介紹了利用JS解決ie6不支持max-width,max-height問題的方法。需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01微信小程序使用自定義組件導(dǎo)航實(shí)現(xiàn)當(dāng)前頁面高亮
這篇文章主要介紹了微信小程序使用自定義組件導(dǎo)航實(shí)現(xiàn)當(dāng)前頁面高亮,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01javascript基本數(shù)據(jù)類型和對象類型歸檔問題解析
這篇文章主要介紹了javascript基本數(shù)據(jù)類型和對象類型歸檔,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03JS小數(shù)轉(zhuǎn)換為整數(shù)的方法分析
這篇文章主要介紹了JS小數(shù)轉(zhuǎn)換為整數(shù)的方法,結(jié)合實(shí)例形式分析了數(shù)值轉(zhuǎn)換的常用方法與使用技巧,需要的朋友可以參考下2017-01-01ES6新增數(shù)據(jù)結(jié)構(gòu)WeakSet的用法詳解
WeakSet和Set類似,同樣是元素不重復(fù)的集合,它們的區(qū)別是WeakSet內(nèi)的元素必須是對象,不能是其它類型。接下來通過本文給大家詳細(xì)介紹ES6新增數(shù)據(jù)結(jié)構(gòu)WeakSet的用法,感興趣的朋友一起看看吧2017-08-08