[ASP.NET]覆蓋某個Session值的方式

以下介紹 在 OnPreInit 中來覆寫某個 Session的值

最近有個系統,原本是在畫面上按下案件後,會將案件編號寫到Session["caseno"]之中,然後再切到Detail的程式。

因為Detail裡又有許多的Tab來呈現詳細資訊,每個Tab是一支aspx,都是讀取 Session["caseno"] 這個值來呈現!

但目前有個問題是,如果User開另一個IE出來,然後如果開另一個案件出來的話,使用者再點回原有的視窗。

這樣這個 Session["caseno"] 的值就會被改成最後的那個值,而導致顯示錯誤的案件資訊!

如果要解決這種狀況的話,目前想到是要帶QueryString到那些程式,並從原本讀取 Session["caseno"] 改成讀取 Request.QueryString["caseno"] 的方式。

如果程式有繼承一個底層的WebPage的話,則可以在 OnPreInit 中,判斷 Request.QueryString["caseno"] 的值,然後再寫到 Session["caseno"]之中,如下,


public class BaseWebPage : Page
{
	private readonly string caseKey = "caseNo";
	protected override void OnPreInit(EventArgs e)
	{
		var queryCaseNo = HttpContext.Current.Request.QueryString[caseKey];
		HttpSessionState session = HttpContext.Current.Session;
		var sessionCaseNo = (string)session[caseKey];
		if (!string.IsNullOrWhiteSpace(queryCaseNo) && !string.IsNullOrWhiteSpace(sessionCaseNo))
		{
			if (sessionCaseNo != queryCaseNo)
			{
				session[caseKey] = queryCaseNo;
				// reload other info
			}
		}
		base.OnPreInit(e);
	}
}

 

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^