原本去年在做項目時,寫好的一記篇博客分享給大家。
Asp.net頁面跳轉Session丟失問題
編寫人:CC阿爸
2014-4-2
l 近來在做泛微OA與公司自行開發的系統集成登錄的問題。在使用Response.redirect跳轉時,Session變量會丟失的問題。
經過在網上搜索部分解決方案,大致可以歸類為以下幾種情況
改變session的存儲介質,默認為InPRoc,還有另外兩種方式,StateServer和SQLServer。
這里把mode改為StateServer,默認的inproc雖然方便好用,但是非常容易出現session丟失的問題,
<sessionState mode="StateServer" stateConnectionString="tcp 解決辦法是在服務器響應時輸出P3P的主機頭聲明: if (context.Request.Browser.Browser.ToUpper().Contains("IE")) context.Response.Headers.Add("P3P", "CP=CAO PSA OUR"); 綜上發現,我使用的是第三種,因此常會出現session丟失的問題,使用第一二種解決方法未能解決。 于是仔細觀察了httpwatch中截獲的請求,發現Cookies選項中在跳轉之前是空的,這個里面應該存儲了當前session的id才對,于是就想如果我在Redirect之前就將session的id放到Cookies中是不是就能解決這個問題了呢。果然不出所料,修改完后問題解決了。 Response.Cookies.Add(newHttpCookie("ASP.NET_SessionId", Session.SessionID)); Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", Session.SessionID)); Response.Redirect("index.htm",false); 后來想到,這個問題還有一個比較簡單的解決辦法就是: Server.Transfer("index.htm ")
新聞熱點
疑難解答