使用ASP.NET State Server實現多應用程序間共享Session State

原覺得ASP.NET State Server原生支持多程序間共享SESSION,覺得在同一服務器上 & 同一根域名下部署的多個應用程序間設置了相同了<sessionState/>和<machineKey/>事情就成了!前端

事實證實是本身TOO YOUNG TOO SIMPLE。根本不WORK!web

BING了一大輪,再找了一下度娘,看到如下較有參考價值的文章:服務器

  1. http://forums.asp.net/t/1759392.aspx?Share+sessions+between+asp+net+web+applications+using+State+Server
  2. http://weblogs.asp.net/lichen/sharing-session-state-over-multiple-asp-net-applications-with-asp-net-state-server
  3. http://blog.itpub.net/12639172/viewspace-675757/

還有其餘幾篇微軟早期的文章,找不回來了。cookie

綜合的結論就是State Server存session數據時,是根據application domain分開放的,即使同一根域名下的每一個程序請求cookie中帶的都是同樣的session id,因爲這些程序各有一個不一樣的application id, session的存取其實就分開了。session

搜索下來看,微軟並無提供直接的可配置選項,也沒有提供公開的接口調用可修改。這個仍是很失望的。app

上述引用的第2、第三篇文章提到的辦法,是在程序初始化時利用.net反射機制調用微軟一個未公開的接口去修改各個程序的application id, 使之統一。asp.net

我試了一下其中override global.asax.Init()的辦法,發現沒有用。(iis版本7.5)dom

用vs 2013 設斷點debug一下,發現init沒有被調用。很是失望。ide

再加上前端時間發現State Server的內存一直緩慢增加,從初始化時的50m,在極少請求的狀況下,也會慢慢增加到超過100m,症狀是很相似於內存泄露的樣子。memcached

OK,算你狠,不肯意再蹚state server渾水了。

計劃是換用memcached管理session得了。

相關文章
相關標籤/搜索