原本去年在做項目時,寫好的一記篇博客分享給大家。
Asp.net頁面跳轉(zhuǎn)Session丟失問題
編寫人:CC阿爸
2014-4-2
l 近來在做泛微OA與公司自行開發(fā)的系統(tǒng)集成登錄的問題。在使用Response.redirect跳轉(zhuǎn)時,Session變量會丟失的問題。
經(jīng)過在網(wǎng)上搜索部分解決方案,大致可以歸類為以下幾種情況
改變session的存儲介質(zhì),默認為InPRoc,還有另外兩種方式,StateServer和SQLServer。
這里把mode改為StateServer,默認的inproc雖然方便好用,但是非常容易出現(xiàn)session丟失的問題,
<sessionState mode="StateServer" stateConnectionString="tcp 解決辦法是在服務(wù)器響應(yīng)時輸出P3P的主機頭聲明: if (context.Request.Browser.Browser.ToUpper().Contains("IE")) context.Response.Headers.Add("P3P", "CP=CAO PSA OUR"); 綜上發(fā)現(xiàn),我使用的是第三種,因此常會出現(xiàn)session丟失的問題,使用第一二種解決方法未能解決。 于是仔細觀察了httpwatch中截獲的請求,發(fā)現(xiàn)Cookies選項中在跳轉(zhuǎn)之前是空的,這個里面應(yīng)該存儲了當(dāng)前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 ")
|
新聞熱點
疑難解答