cookie中數據無法讀取,HttpOnly屬性


新接手一個項目。項目用戶登陸之后用戶信息,token是后端保存在前端的cookie里面的。基於此開發。

在開發中,遇到的問題是瀏覽器手動刷新之后,用戶掉線需要重新登陸問題。在此基礎上,開始解決bug。

一開始我以為是 vuex 中數據沒有持久化保存到 session ,導致用戶信息丟失,后來仔細檢查之后刷新一瞬間是有用戶信息在 session 的。並不是 數據沒有保存。

后來又仔細研究路由之后發現代碼問題。是在路由守衛 beforeEach 中出現的問題。

代碼93行,getToken 因為是通過 cookie 獲取的 token ,沒有獲取到 token 才導致運行的 next('/')  正常刷新應該是走 98 行代碼,讓他運行本地存儲中的東西,而不是跳轉首頁登錄。

因為 token 是后端保存在前端的。保存時候設置的屬性 HttpOnly 。

HttpOnly 字段  cookie的httponly屬性。若此屬性為true,則只有在http請求頭中會帶有此cookie的信息,而不能通過 document.cookie 來訪問此 cookie。這樣能有效的防止XSS攻擊。竊取cookie內容,這樣就增加了cookie的安全性

不能通過任何 js 腳本獲取這個值,只能看得到,但是你獲取不到,

setcookie 一般用法就是 key,value,這兩個屬性。

但是 setcookie 第七個屬性就是設置 httponly 的,設置后無法通過 js 腳本獲取

Cookie名稱(必填) Cookie名稱必須使用只能用在URL中的字符,一般用字母及數字,不能包含特殊字符,如有特殊字符想要轉碼。如js操作cookie的時候可以使用escape()對名稱轉碼。
Cookie值(必填) Cookie值同理Cookie的名稱,可以進行轉碼和加密。
Expires(非必填) 過期日期,一個GMT格式的時間,當過了這個日期之后,瀏覽器就會將這個Cookie刪除掉,當不設置這個的時候,Cookie在瀏覽器關閉后消失。
Path(非必填) 一個路徑,在這個路徑下面的頁面才可以訪問該Cookie,一般設為“/”,以表示同一個站點的所有頁面都可以訪問這個Cookie。
Domain(非必填) 子域,指定在該子域下才可以訪問Cookie,例如要讓Cookie在a.test.com下可以訪問,但在b.test.com下不能訪問,則可將domain設置成a.test.com。
Secure(非必填) 安全性,指定Cookie是否只能通過https協議訪問,一般的Cookie使用HTTP協議既可訪問,如果設置了Secure(沒有值),則只有當使用https協議連接時cookie才可以被頁面訪問
HttpOnly(非必填) 如果在Cookie中設置了"HttpOnly"屬性,那么通過程序(JS腳本、Applet等)將無法讀取到Cookie信息。

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM