簡體   English   中英

在經典的ASP應用程序中,使用會話或cookie來實現跨頁數據持久性更好嗎?

[英]In a classic ASP application, is it better to use a session or cookie for cross-page data persistence?

我繼承了一個經典ASP應用程序的修復程序,該程序中我們要存儲一些特定於用戶會話的數據,以在頁面加載/會話期間保持不變,並且需要一些刷新。

在過去,我僅使用Session變量-即。 Session("SomeVar") = SomeVal

在生產框中的IIS中,我注意到ASP /會話屬性/啟用會話狀態= false。 將此設置為True可讓我成功開始使用會話變量。

我不想消耗服務器上不必要的資源。 過去,我相信我是在幻想的誤解之下,經典ASP中的會話變量存儲在客戶端。 現在重新訪問-數據保留在服務器端。

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

如果實現此功能,我會看到什么樣的服務器影響,並且使用客戶端cookie會是更好的選擇嗎?

多個服務器/服務器場? 如果是這樣,並且您的負載均衡器未設置為“粘性”,並且每次將您發送到同一台服務器,則使用Session可能會遇到麻煩。 調試時要小心一點,我真的會頭疼嗎?

讓我們對此進行分析,一個GUID大約需要40個字符作為字符串,因此在Unicode中就是80字節,我們稱它為100字節。 100 * 3000 = 300KB。 服務器可以為此節省300K嗎? 如果答案是否定的,我認為服務器已經遇到麻煩了。

但是,啟用會話狀態還有其他影響。 啟用會話后,ASP將向客戶端添加自己的cookie,從大小上講,它等效於將GUID存儲為cookie(而不是在會話中)時需要的cookie。 值得注意的是,存儲在cookie中的該會話ID使用了一種算法,有人說它更可預測(我自己對此沒有任何證據)。 因此,如果您將GUID用作某種形式的授權,則將GUID直接存儲為cookie可能會更好。

啟用會話狀態后,還會發生進一步的重大變化。 來自客戶端的ASP請求必須串行處理,服務器將不會並行處理來自同一客戶端的多個請求。 這是因為Session對象是單線程的,並且由於來自客戶端的每個請求都需要對其進行訪問,因此無法同時處理這些請求。

最后一點可能會對客戶端看到的現有行為和性能產生重大影響,尤其是如果正在使用AJAX技術,多個IFrame或導致同時向服務器發送ASP請求的其他技術。

因此,根據要求,您可以選擇將GUID存儲在cookie中,並使會話狀態保持關閉狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM