ASP.NET Response.Redirect 丟失 Session的問題

來源:互聯網
上載者:User

標籤:style   blog   io   color   使用   java   sp   strong   div   

以前在做ASP.NET開發時一直沒注意到一個問題,就是廣泛使用的Response.Redirect方法並不會將伺服器端在Response中新增或修改的Cookie返回給用戶端瀏覽器,而網站的Session一般來說又是通過Cookie來做用戶端唯一標識的,這就會使得當瀏覽器第一次通過Get方法發送請求到伺服器後(由於是用戶端瀏覽器第一次訪問伺服器,所以這時用戶端瀏覽器中還沒有Cookie儲存SessionID),在伺服器返回的響應中得不到帶有SessionID的Cookie,使得瀏覽器在下一次發送請求給伺服器端時,在請求中還是讀不到帶有SessionID的Cookie,伺服器端又會再建立一個新的Session,導致第一次請求在伺服器上建立的Session丟失。注意導致這個問題的前提條件:瀏覽器第一次發送請求到伺服器端,伺服器端使用了Response.Redirect方法,使得產生的帶有SessionID的Cookie不會發送回用戶端瀏覽器。

 

範例程式碼,瀏覽器發送第一次請求到xxx.aspx中設定Session值,然後跳轉到頁面yyy.aspx後,yyy.aspx中讀不到xxx.aspx中設定的Session值,並且在Request.Cookies中產生了一個和xxx.aspx不同的SessionID.

Session["xxx"] = xxx;Response.Redirect("yyy.aspx");

這就是因為xxx.aspx中的Response.Redirect沒有將產生的SessionID通過Cookie傳回瀏覽器,使得瀏覽器在發送請求到yyy.aspx時,伺服器端檢測不到帶SessionID的Cookie,產生了新的Session啟動了新會話,那麼自然也就得不到在xxx.aspx中設定的Session值了。

 

解決方案:

在瀏覽器還沒有得到伺服器端產生的SessionID前,伺服器端盡量不要使用Response.Redirect方法做跳轉,而是用替代方案做用戶端URL地址跳轉,比如通過Javascript來設定瀏覽器的window.location屬性。這樣當瀏覽器獲得第一個請求的伺服器端響應時,就能得到帶SessionID的Cookie了,從而在後續請求中將這個帶SessionID的Cookie發送回伺服器端,使會話延續。

 

ASP.NET Response.Redirect 丟失 Session的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.