在 ASP.NET 中的 Response.Redirect 中傳遞 cookie
我在將 ASP.NET 中的 cookie 傳遞到新 URL 時遇到問題。我將cookie添加到響應中,如下所示:
Response.Cookies.Add(new HttpCookie("Username", Username.Text));然後我發出重定向:
Response.Redirect(returnURL);在我被重定向到的新頁面上,cookie 集合是空的。我嘗試像這樣檢索cookie:
Request.Cookies["Username"].Value;誰能想到為什麼沒有通過cookies?
編輯:
我忘記添加的更多資訊 - 在同一瀏覽器會話中的第二次嘗試中,cookie 正確地通過重定向傳遞。
編輯#2:我發現如果我在重定向 URL 中使用“localhost”而不是實際域名,那麼 cookie 會在第一次登錄時正確傳遞。因此,只有當重定向 URL 是實際域名時,它才不起作用。奇怪的。
瀏覽器僅將 cookie 發送回與設置 cookie 的頁面位於同一域中的頁面。
因此,如果您轉到頁面
http://localhost/login.aspx,然後伺服器繼續設置 cookie 並重定向到(例如)http://mymachinename/default.aspx,則在請求第二個 url 時,cookie 不會從瀏覽器發送到伺服器,因為它不在同一個域中。要取回 cookie,您要麼必須重定向到,要麼必須
http://localhost/default.aspx從最初轉到http://mymachinename/login.aspx.
源伺服器可以發送帶有任何
響應的 Set-Cookie 響應標頭。使用者代理可以忽略包含在
具有 100 級狀態程式碼的響應中的 Set-Cookie
頭,但必須處理包含在其他響應中的 Set-Cookie 頭(包括具有 400
和 500 級狀態程式碼的響應)。源伺服器可以
在單個響應中包含多個 Set-Cookie 標頭欄位。Cookie 或 Set-Cookie 標頭欄位的存在
並不妨礙 HTTP 記憶體
儲存和重用響應。
因此 REDIRECTs (3xx) 在“其他”響應中,因此它們應該由瀏覽器處理,然後瀏覽器可能會出於各種原因丟棄它們。瀏覽器拒絕 cookie 的原因之一是指定了 cookie 的域屬性並且沒有足夠的點(如“localhost”),或者當 cookie 的路徑屬性與 URL 中的實際路徑大小寫不匹配時(cookie 的路徑區分大小寫)。