① 前端開發中 cookie使用的總結
cookie 是存儲於用戶的計算機中的變數。每當同一台計算機通過瀏覽器請求某個頁面時,就會發送這個 cookie。可以使用 JavaScript或者jQuery 來創建和讀取cookie 的值。
1.創建cookie 並且保存
// 函數中的參數分別為 cookie 的名稱、值以及過期天數
2.讀取cookie
3.判斷cookie是否存在
② 如何讓瀏覽器保存我的cookies
在INTERNET選項 內容 自動完成 裡面有一個表單和密碼。再把提示我保存用戶名和密碼那兩個。。選上。。確定就行了。
③ asp如何實現當滑鼠離開輸入框,自動保存輸入框里的內容到cookie里
文本框onblur事件,用webservice調用後台(把文本框的內容保存到cookie)的方法,後台的webMethod返回類型不能是void的
④ 網頁設計中自動保存COOKIE的問題
cookie是保存在客戶端的,如果用戶的瀏覽器設置不使用cookie則會造成登錄信息消失,可以提醒用戶開啟cookie,或者使用session保存登錄信息。
⑤ 前端頁面之間傳值--利用cookie存儲全局變數
需求說明:需要在頁面之間進行傳值,但又無法直接通過在URL中拼接參數的方法獲取。此時可以利用前端瀏覽器的一個屬性cookie,將所需信息存放到cookie中,而後再獲取利用,進行下一系列的操作。
設置、獲取cookie的封裝函數方法如下:
註:上述設置、獲取方法只能是存儲和獲取字元串,而不能是對象。即每次存儲cookie,對應key的value值必須是單個的字元串。
以上。
⑥ JS 怎麼保存Cookie~~
//writeCookie("myCookie","myname",24);
//Storesthestring"myname"inthecookie"myCookie"whichexpiresafter24hours.
//Thehoursparameterisoptional;ifhoursisleftout,'sbrowsersession.
functionwriteCookie(name,value,hours)
{
varexpire="";
if(hours!=null)
{
expire=newDate((newDate()).getTime()+hours*3600000);
expire=";expires="+expire.toGMTString();
}
document.cookie=name+"="+escape(value)+expire;
}
⑦ cookie前端存儲有哪幾種
1、cookie
HTTP cookie,通常直接叫做cookie,是客戶端用來存儲數據的一種選項,它既可以在客戶端設置也可以在伺服器端設置。cookie會跟隨任意HTTP請求一起發送。
優點:兼容性好
缺點:一是增加了網路流量;二則是它的數據容量有限,最多隻能存儲4KB的數據,瀏覽器之間各有不同;三是不安全。
2、userData
userData是微軟通過一個自定義行為引入的持久化用戶數據的概念。用戶數據允許每個文檔最多128KB數據,每個域名最多1MB數據。
缺點:userData不是 web 標準的一部分,只有IE支持。
3、web存儲機制
web storage,包括兩種:sessionStorage 和 localStorage,前者嚴格用於一個瀏覽器會話中存儲數據,因為數據在瀏覽器關閉後會立即刪除;後者則用於跨會話持久化地存儲數據。
缺點:IE不支持 SessionStorage,低版本IE ( IE6, IE7 ) 不支持 LocalStorage,並且不支持查詢語言
4、indexedDB
indexed Database API,簡稱為indexedDB,是在瀏覽器中保存結構化數據的一種「資料庫」。它類似SQL資料庫的結構化數據存儲機制,代替了廢棄已久的web SQL Database API,它能夠在客戶端存儲大量的結構化數據,並且使用索引高效檢索的API。
缺點:兼容性不好,未得到大部分瀏覽器的支持。
5、Flash cookie
Flash本地存儲,類似於HTTP cookie,它是利用 SharedObject類來實現本地存儲信息。它默認允許每個站點存儲不超過100K的數據,遠大於cookie,而且能夠跨瀏覽器。
缺點:瀏覽器需安裝 Flash 控制項,畢竟它是通過Flash的類來存儲。所幸的是,沒有安裝Flash的用戶極少。
6、Google Gears
Google Gears是Google在07年發布的一個開源瀏覽器插件,Gears 內置了一個基於SQLite的嵌入式 SQL資料庫,並提供了統一API 對 資料庫進行訪問,在取得用戶授權之後,每個站點可以在SQL資料庫中存儲「不限大小」的數據。
缺點:需要安裝 Google Gears 組件
⑧ 說一下前端數據存儲方式(cookies,localstorage,sessionstorage,indexedDB)的區別
Cookie最初是在客戶端用於存儲會話信息的,其要求伺服器對任意HTTP請求發送Set-CookieHTTP頭作為響應的一部分。cookie
以name為名稱,以value為值,名和值在傳送時都必須是URL編碼的。瀏覽器會存儲這樣的會話信息,在這之後,通過為每個請求添加Cookie
HTTP頭將信息發送回伺服器。
localstorage
存儲方式:
以鍵值對(Key-Value)的方式存儲,永久存儲,永不失效,除非手動刪除。
sessionstorage
HTML5 的本地存儲 API 中的 localStorage 與 sessionStorage 在使用方法上是相同的,區別在於 sessionStorage 在關閉頁面後即被清空,而 localStorage 則會一直保存。
IndexedDB
索引資料庫(IndexedDB) API(作為 HTML5 的一部分)對創建具有豐富本地存儲數據的數據密集型的離線 HTML5 Web 應用程序很有用。同時它還有助於本地緩存數據,使傳統在線 Web 應用程序(比如移動 Web 應用程序)能夠更快地運行和響應。
⑨ 瀏覽器中的cookie存儲
cookie:cookie數據會自動在web瀏覽器和web伺服器之間傳輸,也就是說當發送http請求時,就會把該請求下域名所有的cookie值發送到web伺服器端。因此伺服器腳本可以對存儲在客戶端的cookie值進行讀寫操作。cookie的有效期是很短暫的,一般關閉瀏覽器,cookie保存的數據就會丟失,要想延長cookie的有效期,可以通過設置http頭信息來實現。伺服器保存cookie的數目一般不超過50個,每個不能大於4KB;cookie的優點是能在可以和伺服器進行通信。缺點是它會隨著http頭信息一起發送的,增加網路流量,他只能存儲少量數據,只能存儲字元串,存在安全問題。
⑩ 應用鑒權
應用鑒權就是當一個用戶進入APP時,我們需要判斷他所擁有的權利,根據權力來判斷他所能進行的一個行為,最為常見的就是購物網站的登錄以及購物支付等操作。
Http的請求是無狀態的,就是說在一個Http請求中的請求方和響應方都是無法維護狀態,是一次性的,所以我們就不知道請求前後都發生了什麼。所以我們需要標記的功能,而瀏覽器的sessionStorage,localStorage,全局變數等限制太多,就有了cookie,session,token等鑒權的操作。
cookie也是一種前端存儲的方式,但是他和sessionStorage,localStorage等本地存儲的不同在於,瀏覽器向服務端發起請求的時候,cooike是自動傳過去的,可以做到前端無感知,出錯的概率更低
過程:
1.瀏覽器向伺服器發起請求並傳送數據,由伺服器接收數據然後設置cooike放進響應頭(Set-Cookie),瀏覽器接收到響應之後就會自動存儲進cookie
2.在之後的每一次請求中瀏覽器都會自動的在請求頭之中設置cookie欄位,發送給服務端
配置:
1.Domain/Path
cookie 是要限制空間范圍的,通過 Domain(域)/ Path(路徑)兩級。
2.Expires / Max-Age
cookie 還可以限制時間范圍,通過 Expires、Max-Age 中的一種。
3.Secure / HttpOnly
cookie 可以限制使用方式。
Http頭對cookie的讀寫:
響應會攜帶一個Set-Cookie頭,一個Set-Cookie只能設置一條cookie,格式為cookie鍵值+配置鍵值,如果想要一次設置多個cookie,我們可以多寫幾個Set-Cookie在頭裡面。
而當瀏覽器請求伺服器的時候,就不再需要發送配置內容了,只需要發送鍵值對就可以
前端對cookie的讀寫操作:
如果服務端設置的cookie並沒有設置httpOnly,那麼我們就可以調用document.cookie來對cookie進行讀寫操作,但一次調用document.cookie就只能操作一個cookie
在上面我們介紹了cookie,可以了解到cookie其實是瀏覽器存儲的一種實現,可以看作應用鑒權的基石。但是它只是一個存儲信息的工具,我們還需要判斷其中的信息是不是安全的操作者,這時候我們就需要session了。
典型的session登錄流程:
session的存儲與過期銷毀:
由於session是用來驗證的,所以服務端僅僅只是給瀏覽器的cookie中添加一個sessionid,所以也需要自己保存一下,存儲的方式:
而session也可以手動設置過期時間,一到過期時間就直接清空存儲的內存就好了
session的分布式問題:
由於服務端是集群,而用戶請求過來會走一次負載均衡,不一定會打到哪台機器上。一旦用戶後續介面請求到的機器和他登錄請求的機器不一樣,或者登錄請求的機器出問題了,那session就會失效。
常見的解決方式:
目前主流的token存儲還是在cookie中進行,但是為了防止偽造token造成的安全問題,我們還需要一些加密演算法來生成簽名,來保證數據安全性
業務介面用來鑒權的 token,我們稱之為 access token。越是許可權敏感的業務,我們越希望 access token 有效期足夠短,以避免被盜用。但過短的有效期會造成 access token 經常過期,過期後怎麼辦呢?
一種辦法是,讓用戶重新登錄獲取新 token,顯然不夠友好,要知道有的 access token 過期時間可能只有幾分鍾。
另外一種辦法是,再來一個 token,一個專門生成 access token 的 token,我們稱為 refresh token。
如果refresh token過期了,就只能重新登陸了。
客戶端存cookie與存放於其他地方
1.出了瀏覽器環境之外就沒有cookie了;
2.cookie是瀏覽器在域下自動攜帶的。很容易引發CSFR攻擊
存放在別的地方可以解決部分問題
服務端存儲數據於不存
1.存數據的話可以縮短認證字元串的長度,減小請求體積
2.不存數據就不會出現分布式處理的問題,降低硬體成本,避免查庫帶來的驗證延遲
前面我們已經知道了,在同域下的客戶端/服務端認證系統中,通過客戶端攜帶憑證,維持一段時間內的登錄狀態。
但當我們業務線越來越多,就會有更多業務系統分散到不同域名下,就需要「一次登錄,全線通用」的能力,叫做「單點登錄」。
在 主域名相同 的情況下,就可以直接把cookie設置為主域名就可以實現了。
如果 主域名不同 ,我們就需要獨立的認證服務,稱為SSO。
如果是在瀏覽器之下實現,我們需要考慮其他的東西
對瀏覽器來說,SSO 域下返回的數據要怎麼存,才能在訪問 A 的時候帶上?瀏覽器對跨域有嚴格限制,cookie、localStorage 等方式都是有域限制的。
這就需要也只能由 A 提供 A 域下存儲憑證的能力。一般我們是這么做的:
圖中我們通過顏色把瀏覽器當前所處的域名標記出來。注意圖中灰底文字說明部分的變化。
1.HTTP 是無狀態的,為了維持前後請求,需要前端存儲標記
2.cookie 是一種完善的標記方式,通過 HTTP 頭或 js 操作,有對應的安全策略,是大多數狀態管理方案的基石
3.session 是一種狀態管理方案,前端通過 cookie 存儲 id,後端存儲數據,但後端要處理分布式問題
4.token 是另一種狀態管理方案,相比於 session 不需要後端存儲,數據全部存在前端,解放後端,釋放靈活性
5.token 的編碼技術,通常基於 base64,或增加加密演算法防篡改,jwt 是一種成熟的編碼方案
6.在復雜系統中,token 可通過 service token、refresh token 的分權,同時滿足安全性和用戶體驗
7.session 和 token 的對比就是「用不用cookie」和「後端存不存」的對比
8.單點登錄要求不同域下的系統「一次登錄,全線通用」,通常由獨立的 SSO 系統記錄登錄狀態、下發 ticket,各業務系統配合存儲和認證 ticket
閱讀知乎文章: 鑒權必須了解的5個兄弟:cookie、session、token、jwt、單點登錄 - 知乎 (hu.com)