1. 程式人生 > >JS Cookie丟失問題

JS Cookie丟失問題

情況 cape 創建 aid ack else chang 訪問 localhost

JS Cookie丟失問題

前些天有人問我vue中使用proxy發送請求,為什麽請求時cookie丟失,首先說一下我對cookie的理解:

1、cookie在正常情況下是會在每次請求時自動攜帶,

2、cookie雖然是由一個網頁所創建,但並不只是創建cookie的網頁才能讀取該cookie。

在默認情況下,與創建cookie的網頁在同一目錄或子目錄下的所有網頁都可以讀取該cookie。即:

(1)如果在這個目錄下還有子目錄,要使在子目錄中也可以訪問,則需要使用path參數設置cookie,語法如下:

  document.cookie="name=value; path=cookiePath";

 (2)如果要使cookie在整個網站下可用,可以將cookieDir指定為根目錄,示例如下:

  document.cookie="userId=320; path=/";

上面所說都指的是在同一個目錄中的訪問,可是要想在不同虛擬目錄中訪問則要另外想辦法來解決這個問題。

 設置路徑代碼如下:

var now=new Date()
new Date().setDate(now.getDate()+1);
var cookies="setCookies="+escape("我的cookies")+";expires="+now.toString()+";path=/";

註意:path不能解決在不同域中訪問cookie的問題。

(3) 在默認情況下,只有和設置cookie的網頁在同一個Web服務器的網頁才能訪問該網頁創建的cookie。

但可以通過domain參數來實現對其 的控制,其語法格式如下:

document.cookie="name=value; domain=cookieDomain";


設置域代碼如下:
  
var now=new Date()
new Date().setDate(now.getDate()+1);
var cookies="userName="+escape("哈哈")+";expires="+now.toString()+";path=/; domain=.baidu.com";
 
看完上面的敘述我們回到上面的疑問,不難理解vue中使用proxy時cookie丟失的原因就是path和domain,
如果後臺返回cookie的path是‘/b‘而本地前端本地開發地址為localhost:8080/#/home 頁面,我們需要再後端返回cookie時手動修改path路徑,代碼如下:
  proxyTable: {     ‘/api‘:{     target: ‘後臺接口地址‘,     changeOrigin: true,     pathRewrite: {     ‘^/api‘: ‘/b‘,//註意這裏只是接口關鍵字的替換,與cookie的path無關     },     onProxyRes(proxyRes, req, res) {       var oldCookie = proxyRes.headers[‘set-cookie‘]       if(oldCookie== null || oldCookie.length==0){         delete proxyRes.headers[‘set-cookie‘]         return        }       var oldCookieItems = oldCookie[0].split(‘;‘)       var newCookie = ‘‘       for(var i=0; i < oldCookieItems.length; ++i){         if(newCookie.length >0)        newCookie += ‘;‘         if(oldCookieItems[i].indexOf(‘Path=‘) >= 0)           newCookie += ‘Path=/‘         else           newCookie += oldCookieItems[i]         }       proxyRes.headers[‘set-cookie‘] = [newCookie]       }     }   }

JS Cookie丟失問題