Skip to content

一個簡單解決跨網域 cookie 請求時,電腦版 Safari 瀏覽器和 iPhone 上的 Safari、Chrome、Firefox 瀏覽器預設阻擋第三方 cookie 的問題。

Notifications You must be signed in to change notification settings

Lianginger/cross-domain-cookie

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 

Repository files navigation

Cross-Domain-Cookie

一個簡單解決跨網域 cookie 請求時,電腦版 Safari 瀏覽器和 iPhone 上的 Safari、Chrome、Firefox 瀏覽器預設阻擋第三方 cookie 的問題。
Demo site

專案背景

採用前、後端分離開發部屬後,前端和後端的網址可能是不一樣的,當前端向後端 API 發出請求的時候就會遇到 CORS 的問題,本專案將模擬一個加入購物車的情境:

  • 前端:使用 axios 發送跨網域攜帶 cookie 的請求。( 本專案 )
  • 後端:Node.js + Express,使用 session 記錄使用者的購物車 id、商品 id 和商品數量( 非常粗糙的簡化,請勿使用在 Production )。( 後端專案 repository )

解決方法

如果發出的跨網域請求 不需要攜帶 cookiecors 套件可以快速啟用一個 cors 的 Express middleware,簡單解決跨網域 CORS 問題。

如果發出的跨網域請求 需要攜帶 cookie,要額外設定:

除了 Safari,電腦版的其它瀏覽器已經可以正常加入購物車,但電腦版 Safari 及 iPhone 上的 Safari、Chrome 及 Firefox 手機 App 瀏覽器預設都會阻擋第三方 Cookie,這使得後端無法透過 session 辨識前端使用者是同一個人,每次的加入購物車都會創建一個新的 cartId,購物車內的商品不會累加。

一個簡單的解決方法是讓用戶去後端網址過水一下,將前端網址重新導向後端網址,讓瀏覽器認可後端網址存取 Cookie ( 此時後端的 Cookie 已經不是第三方 Cookie,而是第一方 Cookie,因此可以順利被瀏覽器存取 ),接著,後端網址再重新導向前端網址,之後 axios 就可以順利發送跨網域攜帶 cookie 的請求,購物車內的商品會不斷累加。

參考資料

About

一個簡單解決跨網域 cookie 請求時,電腦版 Safari 瀏覽器和 iPhone 上的 Safari、Chrome、Firefox 瀏覽器預設阻擋第三方 cookie 的問題。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages