排查了兩天的問題,本來都是運行正常的cookie驗證,突然不好用了,服務器獲取不到cookie信息。
我確實是升級了.netcore sdk,之前是2.2.102,后來升級成了2.2.107,一開始並沒有意識到直接卸載新版本進行調試,
只是想看看問題出在哪?
首先是打印出來服務器段寫入的cookie信息:
1 "Set-Cookie": "[.AspNetCore.loginvalidate=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/, .AspNetCore.loginvalidate=xxxxxxx; expires=Tue, 03 Dec 2019 13:58:33 GMT; path=/; samesite=none]",
沒看出什么問題,然后我在HttpContext.SignInAsync 方法下面又自己偽造了一個cookie信息寫入,
HttpContext.Response.Cookies.Append(".AspNetCore.loginvalidate", "xxxxx"),注意xxx是真實的登錄信息,我拷貝過來的,這次竟然登錄成功了,問題
就應該出在后面的參數里
expires=Tue, 03 Dec 2019 13:58:33 GMT; path=/; samesite=none
最后經過調試發現有samesite=none 就會出問題,但是cookie信息也不能靠手動去編輯,最后我把新版本的sdk刪掉,然后重啟,再回寫的cookie信息就沒有
samesite=none,兩個sdk版本對cookie的處理有了差異。
問題又來了,加上
samesite=none 其實並不應該有問題,本身已經說明了不進行samesite的限制,問題還是出現在終端調用的代碼上,因為用PC端進行登錄就一直沒有問題,
而我的手機端使用的是uniapp的 uni.request進行api調用,android的手機cookie信息存在
samesite=none就無法通過cookie驗證,而ios又不存在這個問題,是不是uniapp的一個坑,回頭我得去提一下issue,先記錄這些