﻿# 網站流量大時用 Session 太損耗記憶體，那要用什麼？

我們開發網站時，如果會員人數多且流量真的很大的話，用 Session 不見得是好方法，因為十分損耗記憶體。

在 ASP.NET 中雖然你可以將 Session 的資料[改存到 ASP.NET 狀態伺服器](/post/2008/01/12/How-to-avoid-Session-data-loss-in-ASPNET "如何讓 ASP.NET 使用 Session 資料時不要再自動消失") 或 SQL Server 中，是可以解決「記憶體」耗用的問題，但是多少還是會有網頁執行效能的問題，因為使用者每讀取一頁都要進資料庫讀取 Session 資料，這多少會增加網頁的反應時間。

我們有些網站就會將這類個人化的資訊改用 Cookie 或 URL 來儲存。例如說：你可能有上過 Amazon 或 Yahoo 的網站，有些網址特別的長，而且都是看不懂的亂碼，就有可能他們是將特定的個人化資訊 (e.g.帳號或Token) 加密後直接放在網址裡，這樣可以省去伺服器的一些資源(CPU, Memory)。

但基於安全性考量，我們不會把機密的資料直接儲存在 Cookie 或 URL 裡，而是改用「加密過後」的資料，到了伺服器在視情況解密，這不但節省記憶體的使用，也會減少資料的 I/O 動作，進而提升執行效率。如果你想研究怎麼用 C# / .NET 加密的話，可以參考這篇文章：[Encrypting and decrypting data](http://www.dotnetthis.com/Articles/Crypto.htm "Encrypting and decrypting data")

如果用另一個角度來思考，就是拿一點點「頻寬」來換「記憶體」，因為就成本考量下，「頻寬」的成本比「記憶體」低太多了。
