賞金將在 3 天后到期。此問題的答案有資格獲得 100聲望賞金。 Kote Isaev想引起對這個問題的更多關注:
需要答案來修復當前軟體中的錯誤。用戶無法從 Web 應用程式中注銷。
設定會話 cookie 的代碼如下:
res.cookie(newCookieName, sessionCookie, {
domain: getCookiesDomain(),
maxAge: ms('30 days'),
secure: true,
httpOnly: true,
sameSite: 'lax'
});
在注銷時,我們這樣做:
function clearOneSessionCookie(res:Response, cookieName, sameSite?: 'lax'|'strict'|'none'):void {
if (sameSite) {
res.clearCookie(cookieName, {
domain: getCookiesDomain(),
maxAge: -1000,
httpOnly: true,
secure: true,
sameSite: sameSite
});
} else {
res.clearCookie(cookieName, {
domain: getCookiesDomain(),
maxAge: -1000,
httpOnly: true,
secure: true
});
}
}
clearOneSessionCookie(res, newCookieName);
clearOneSessionCookie(res, newCookieName, 'lax');
clearOneSessionCookie(res, newCookieName,'strict');
clearOneSessionCookie(res, legacyCookieName);
clearOneSessionCookie(res, legacyCookieName, 'lax');
clearOneSessionCookie(res, legacyCookieName,'strict');
我們應用了所有可能的選項,clearOneSessionCookie因為在我們專案的不同階段轉移到不同的 cookie 名稱和選項,我們使用了不同的sameSite選項。
我什至更新到最新express的cookie-parser軟體包,希望能解決這個問題,但到目前為止還沒有效果。
注銷請求后,谷歌瀏覽器的 Cookies 選項卡上顯示以下資訊:
請求 Cookie:
- old_cookie_name: domain = www.example.com , path = /, expires = Future_Date_1, HttpOnly = yes, Secure = yes, SameSite=[未設定!]
- new_cookie_name: domain = www.example.com , path = /, expires = Future_Date_2, HttpOnly = yes, Secure = yes, SameSite=Lax
回應 Cookie:
old_cookie_name: domain = www.example.com , path = /, max-age: -1000 ms, HttpOnly = yes, Secure = yes, Same-Site: Lax
old_cookie_name: domain = www.example.com , path = /, max-age: -1000 ms, HttpOnly = yes, Secure = yes, Same-Site: Strict
new_cookie_name: domain = www.example.com , path = /, max-age: -1000 ms, HttpOnly = yes, Secure = yes, Same-Site: Lax
new_cookie_name: domain = www.example.com , path = /, max-age: -1000 ms, HttpOnly = yes, Secure = yes, Same-Site: Strict
請注意,現在有行
- old_cookie_name: domain = www.example.com , path = /, max-age: -1000 ms, HttpOnly = yes, Secure = yes, Same-Site: [未設定]
所以,似乎呼叫
clearOneSessionCookie(res, legacyCookieName);
不起作用或瀏覽器無法理解/識別。這個具體set-cookie被忽略了:
set-cookie: old_cookie_name=; Max-Age=-1; Domain=www.example.com; Path=/; Expires=Sat, 04 Jun 2022 15:27:10 GMT; HttpOnly; Secure
清除具有舊名稱且未Same-Site應用顯式值的 cookie 的最佳方法是什么?
感謝您的回答和時間。
更新:問題癥狀的澄清:legacyCookieName未設定(屬性沒有值SameSite)的 cookie 作為結果,在遷移到新 cookie 設定之前登錄的現有用戶無法退出網站。
更新 即使我為這個問題做了一個解決方法(見標記的答案),如果有人在賞金活動期間提供更好的作業解決方案,獎品就是你的。
uj5u.com熱心網友回復:
使用新的 chrome 更新
如果您不指定 sameSite,則默認為 sameSite:'lax'。
因此,如果您使用 sameSite:'lax' 和 clearCookie 設定沒有 SameSite 屬性的 cookie,則 cookie 將被洗掉。因為沒有同一個站點 = sameSite:'lax'
uj5u.com熱心網友回復:
在嘗試了對遺留 cookie 洗掉 API 呼叫設定的各種技巧和調整后,我得出結論,到目前為止,所描述的錯誤只有一個解決方法:
- 向回應中添加一個新的 cookie,例如
authProtocolVersion,其值類似于1請求處理中涉及的會話。 - 如果此 cookie 在請求到達階段已經存在并且請求必須與會話互動,這將更新會話 cookie 分析行為以跳過/忽略
legacySyssionCookie,即使它仍然存在,并且newCookieName在請求到達時不存在。 - 在注銷期間仍然發送注銷 cookie 清理
clearOneSessionCookie所有可能組合的呼叫SameSite- 未設定,,none,lax,strict以確保最終在瀏覽器端修復帶有 cookie 清理的錯誤時,將清除遺留身份驗證 cookie。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/489683.html
上一篇:在“div”旁邊放置文本
