欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

cookies設置允許還是不行

錢斌斌2年前13瀏覽0評論

cookies設置允許還是不行?

之前項目有一個需求,在下載文件的時候,在向后端發出請求的這段時間要有loading動畫提高交互性。

但是當時后端只能以傳統的向前端發送流的形式來下載,ajax派不上用場,只能用js去模擬,但是這樣就監聽不到后端的返回,只能等后端將數據流發送回來,瀏覽器自動彈出下載提示。

想了想,只能是后端返回的時候發送一個Cookie: {downloading: true},然后我前端輪詢這個字段,輪詢到就將loading關閉,并將這個cookie刪除。理論上來說好像是沒什么毛病,但實際應用起來還是有一些坑的。

踩坑完畢,記錄一下。

首先遇到的第一個坑就是發現cookie刪不掉。

當然,這里說明一下,并不是js或者瀏覽器本身的機制不允許刪除cookie,只是我刪除的方式不對。

一開始我只是簡單的將cookie設置為空,將expires設置為-1。心里想著,已過期,cookie自動清除,美滋滋,然而事實并沒有按照我想的發生。downloading還是躺在cookie里面沒有任何變化,是因為沒有刷新嗎?于是我在后面再次獲取了一下:

console.log(document.cookie);

發現cookie里面確實還是有downloading這個字段。

沒辦法,打開application看看,果然發現了問題,后端傳遞過來的這個cookie沒有設置expires,但是卻默認設置了path,再聯想我之前刪除的cookie是沒有帶任何參數的,結合cookie的機制,發現了問題所在。

解決辦法:

在刪除cookie的時候要加上這個字段所帶的參數,可能是出于安全的考慮,不同的參數,即使名字相同,也會當成兩個cookie存儲,所以我刪除的并不是后端傳過來的cookie,自然就刪除不了。

第二個坑,后端設置cookie默認的path屬性沒有規律。

出于代碼復用和性能考慮,后端的很多功能都會集成到一個API,再加上前端可能會用到一些第三方的框架,這些框架所采用過的設計模式都各不相同,都會造成一些不可預測的結果,而項目有可能在任何地方都會有下載的需求,所以當我發現如何刪除cookie的時候,我又發現了一個坑,那就是不知道該如何準確獲取cookie的path屬性。而且如果你請求的接口默認path與你所在的url不匹配的話,瀏覽器將會忽略這次的cookie設置,在我的項目的直接體現就是,后端響應了cookie,但是我前端接收不到,頁面loading無法消失,卡死了。

解決辦法:

根據cookie的機制,當cookie的path屬性為'/'的時候,cookie就不會被忽略。

所以解決辦法就是讓后端在set-cookie的時候講path設置成固定的'/',以java為例:

Cookie cookie = new Cookie("Downloading","true");

cookie.setPath("/");

response.addCookie(cookie);

然后前端只要在監聽到downloading字段的時候,再將path='/'的downloading刪除就可以了。

輪詢java,cookies設置允許還是不行