我們開發網站時,如果會員人數多且流量真的很大的話,用 Session 不見得是好方法,因為十分損耗記憶體。
在 ASP.NET 中雖然你可以將 Session 的資料改存到 ASP.NET 狀態伺服器 或 SQL Server 中,是可以解決「記憶體」耗用的問題,但是多少還是會有網頁執行效能的問題,因為使用者每讀取一頁都要進資料庫讀取 Session 資料,這多少會增加網頁的反應時間。
我們有些網站就會將這類個人化的資訊改用 Cookie 或 URL 來儲存。例如說:你可能有上過 Amazon 或 Yahoo 的網站,有些網址特別的長,而且都是看不懂的亂碼,就有可能他們是將特定的個人化資訊 (e.g.帳號或Token) 加密後直接放在網址裡,這樣可以省去伺服器的一些資源(CPU, Memory)。
但基於安全性考量,我們不會把機密的資料直接儲存在 Cookie 或 URL 裡,而是改用「加密過後」的資料,到了伺服器在視情況解密,這不但節省記憶體的使用,也會減少資料的 I/O 動作,進而提升執行效率。如果你想研究怎麼用 C# / .NET 加密的話,可以參考這篇文章:Encrypting and decrypting data
如果用另一個角度來思考,就是拿一點點「頻寬」來換「記憶體」,因為就成本考量下,「頻寬」的成本比「記憶體」低太多了。