今天Tony提到說我們系統中會利用如下代碼來判斷用戶是否過期。
if (string.IsNullOrEmpty(UserContext.ConnectionSessionId)) { LogUIFactory.Current.Debug(HEARTBEAT_DISCONNECTION_LOG_2); timeout = true; }
但是我做實驗發現,在page load的時候,打印出來的sessionid是一直在變化的:
protected void Page_Load(object sender, EventArgs e) { Response.Write(HttpContext.Current.Session.SessionID); }
上面這代碼很好解釋,因為http連接是無狀態的,所以每次請求過來,sessionid會變化,不足為怪。
但是如果稍微加點料,就不一樣了:
protected void Page_Load(object sender, EventArgs e) { Session["tst"] = "222"; Response.Write(HttpContext.Current.Session.SessionID); }
上面打印出來的sessionid是一直不會再變化的。
看來如果賦值了之后,session實例會被創建,然后其id就被固定下來了。
session這東西幾年前在用,最近幾年寫程序,一直在用cookie,都差點忘記了session這點了。今天看到老系統用的仍然是這個,並且發現了其中的這點,感覺收獲還挺大的,至少可以再解決框架中的一個技術難點。