iT邦幫忙

0

瀏覽器無法存下cookie[已解決]

  • 分享至 

  • xImage

已解決:確認是domain設定錯誤為localhost的關係


我使用以下程式碼發送ajax請求,得到的回應也有set-cookie,但是瀏覽器卻沒有存下cookie,請問是哪裡設定錯了?

程式碼

$.ajax({
                method: "POST",
                url: url,
                data: data,
                processData: false,
                contentType: false,
                xhrFields: {
                    withCredentials: true
                },
})

得到的回應

HTTP/1.1 200 OK
Server: nginx/1.20.2
Date: Mon, 20 Dec 2021 16:45:10 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 112
Connection: keep-alive
Set-Cookie: AccessToken=AccessCode=9yaO344jtug1E3P73pj878tZyvocXFMxB1b1XlBgoj8&uid=1; Path=/; Max-Age=2592000; HttpOnly; Secure; SameSite=None
Access-Control-Allow-Origin: https://dcreater.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, OPTIONS, POST
Access-Control-Allow-Headers: User-Agent,Keep-Alive,Content-Type,Pragma,Cache-Control,Upgrade-Insecure-Requests

但是刷新後卻沒有東西
https://ithelp.ithome.com.tw/upload/images/20211221/20124291ALr2bFki0A.png

以我所查到的資訊說要讓瀏覽器存需要:

  • withCredentials 有
  • Access-Control-Allow-Origin 非*
  • SameSite None
  • 使用https連線

看起來都有符合,請問我是哪邊設定不對嗎?

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2021-12-21 09:35:27 檢舉
https://ithelp.ithome.com.tw/articles/10251288

或許是瀏覽器問題?
theRookie iT邦新手 1 級 ‧ 2021-12-21 10:25:40 檢舉
回應應該要貼上來
如果cookie塞不下,他是直接不放進去的
fillano iT邦超人 1 級 ‧ 2021-12-21 13:22:26 檢舉
「瀏覽器卻沒有存下cookie」這件事情,是怎麼判斷的?
linyanbin iT邦新手 5 級 ‧ 2021-12-21 14:27:08 檢舉
不懂theRookie的意思。ajax的我回應不是有貼嗎?
linyanbin iT邦新手 5 級 ‧ 2021-12-21 14:31:00 檢舉
fillano 刷新後request送出的請求中header並沒有cookie,開發人員工具也沒有顯示有存下來
fillano iT邦超人 1 級 ‧ 2021-12-21 14:31:59 檢舉
你的set-cookie有HttpOnly,別跟我說你用document.cookie來取cookie。
linyanbin iT邦新手 5 級 ‧ 2021-12-21 14:36:23 檢舉
這筆cookie我沒有用js去做任何處理,我對cookie的理解是回應的header有set-cookie,瀏覽器就會記錄下來,之後發送request就會一起送過去
fillano iT邦超人 1 級 ‧ 2021-12-21 14:38:34 檢舉
如果是這樣就沒錯...
fillano iT邦超人 1 級 ‧ 2021-12-21 15:22:47 檢舉
同一個domain嗎?
linyanbin iT邦新手 5 級 ‧ 2021-12-21 15:26:33 檢舉
阿,我正要編輯,是的,剛剛確認是domain 設定有誤,感謝
fillano iT邦超人 1 級 ‧ 2021-12-21 15:26:50 檢舉
等一下,你不是使用https?你的set-coolie有Secure耶?
fillano iT邦超人 1 級 ‧ 2021-12-21 15:27:42 檢舉
XD,找到問題就好
linyanbin iT邦新手 5 級 ‧ 2021-12-21 15:31:08 檢舉
連線都是https,感謝大大的熱心
froce iT邦大師 1 級 ‧ 2021-12-21 15:46:50 檢舉
...這結果...XD
昏了,完全意想不到的結果。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2

AJAX是沒辦法幫你建立本機COOKIE的。
你要自行使用JS的方式處理,或是透過表單執行後端程式碼處理

AJAX的原理講白話點,其實是另開一個瀏覽元件處理。所以你後端設定的COOKIE。
是會回存到這個地方。但實際上這是一個瀏覽元件。用完了就沒了。

你原來運行的瀏覽器並不會有任何cookie的運做。

看更多先前的回應...收起先前的回應...
froce iT邦大師 1 級 ‧ 2021-12-21 09:33:00 檢舉

怎麼可能不行,這樣很多靠cookie的登入機制就不能用ajax去做登錄了。剛剛也實測過是可以的,不過我的測試是在同一domain下。

原po的我是沒看出問題在那就是了。

瀏覽器的AJAX回應,並不會去處理當下的COOKIE值的。
這邊指的是AJAX不會去處理COOKIE回應回來。
需要做一下處理才能拿到COOKIE值。並不能單靠AJAX來處理的。

我是就題意來說明的。不過因為他說明的不夠清楚。
我是從他查瀏覽器的回應來判斷他想要的動作。

如要說的更清楚。AJAX與COOKIE其實並無直接關係。
AJAX是AJAX。
COOKIE是COOKIE。
兩者無相對應的關係。但有其互助的關係。

結論就是:AJAX本身並無能處理COOKIE的能力。靠的是其後端處理及後續JS處理。

這樣說明因該會比較清楚了吧。說真的,我也不知道我再說啥了。

froce iT邦大師 1 級 ‧ 2021-12-21 13:57:42 檢舉

我看他題意很清楚啊,就他看到回應有set-cookie檔頭,然後瀏覽器裡沒有相對應的cookie鍵值對。

你原本回的看起來就像ajax不能設定cookie一樣,解釋過我才知道你的意思是這個...

linyanbin iT邦新手 5 級 ‧ 2021-12-21 14:32:45 檢舉

我的意思正如froce所說,回應的header有set-cookie,瀏覽器卻沒顯示

2
天黑
iT邦研究生 5 級 ‧ 2021-12-21 11:06:26

ajax沒辦法直接改cookie喔,如果你要靠後端回寫cookie,是要經過頁面重載或者使用javascript寫入cookie,簡單打個比方登入好了,是使用 form post submit 整個頁面重新載入或者跳轉才有對應的cookie資訊


抱歉更正一下
後端是可以回寫cookie的,使用ajax也可以正確修改

linyanbin iT邦新手 5 級 ‧ 2021-12-21 14:40:57 檢舉

是的,我有刷新,而我這裡的意思是,ajax回應後的header明明有看到set-cookie,瀏覽棄卻沒有找到cookie的紀錄,

我要發表回答

立即登入回答