2012-08-01 39 views
1

我在傳統ASP應用程序上繼承了一個修補程序,我們希望存儲某些用戶會話特定的數據,以便在頁面加載/會話期間保持持久性,並且需要一點點修復。在傳統的ASP應用程序中,使用會話或cookie來跨頁面數據持久性更好嗎?

在過去,我只是使用會話變量 - 即。 Session("SomeVar") = SomeVal

在IIS上的生產中,我注意到,ASP /會話屬性/啓用會話狀態=假。將其設置爲True允許我成功開始使用會話變量。

我不想在服務器上消耗超過必需的資源。在過去,我相信我一直存在着錯覺,認爲經典ASP中的會話變量存儲在客戶端。現在重新訪問 - 數據保留在服務器端。

我保存的字符串是一個GUID,爲大約3000連接的客戶端。

什麼樣的服務器影響我在找,如果我實現這個的,並會使用客戶端的cookie是更好的選擇?

回答

0

讓此分析比特,GUID需要大約40個字符作爲一個字符串因此以Unicode那80個字節,讓稱之爲100個字節。 100 * 3000 = 300KB。服務器可以爲此備件300K嗎?如果答案是否定的,我認爲服務器已經陷入麻煩。

但是,啓用會話狀態還有其他影響。啓用會話時,ASP將自己的Cookie添加到客戶端,在大小方面可能與您將GUID存儲爲Cookie而不是會話中需要的cookie相當。值得注意的是,存儲在cookie中的這個會話ID使用了一個算法,這個算法有些人說是更可預測的(我自己沒有任何證據)。因此,如果您使用GUID作爲某種形式的授權,那麼將GUID直接存儲爲cookie可能會更好。

當會話狀態啓用時會發生進一步的重大變化。來自客戶端的ASP請求必須串行處理,服務器不會並行處理來自同一客戶端的多個請求。這是因爲Session對象是單線程的,並且由於來自客戶端的每個請求都需要訪問它,請求不能同時處理。

最後一點可能對一個客戶看到,特別是如果這導致ASP同時請求AJAX技術,多個iframe或其他技術被髮送到正在使用的服務器現有的行爲和性能顯著的影響。

因此,對於要求你有我的選擇是對的GUID存儲在cookie並離開會話狀態關閉。

1

多個服務器/服務器場?如果是這樣,如果負載平衡器未設置爲「粘性」,並且每次都將您發送到同一服務器,則可能會遇到使用會話的麻煩。我真的很頭痛,因此很容易調試。

相關問題