ASP Application 物件:全域共享資料與狀態管理
Application 物件提供應用程式層級的共享資料儲存,所有使用者共用同一個 Application 物件,適合存放資料庫連線字串、全域計數器、快取資料等。
Application vs Session 差異
| 特性 | Application | Session |
| 範圍 | 整個應用程式 (所有使用者) | 單一使用者 |
| 生命週期 | 應用程式啟動至結束 | 使用者 Session 期間 |
| 典型用途 | 連線字串、全域設定、線上人數 | 購物車、登入狀態、個人化設定 |
集合
| 集合 | 描述 |
| Contents | 腳本指派的所有項目 |
| StaticObjects | <object> 標籤宣告的物件 |
方法
| 方法 | 描述 |
| Contents.Remove(key) | 移除指定項目 |
| Contents.RemoveAll() | 清空所有項目 |
| Lock() | 鎖定 Application,防止其他使用者同時修改 (防止競態條件) |
| Unlock() | 解除鎖定 |
事件 (Global.asa)
| 事件 | 觸發時機 |
| Application_OnStart | 第一個 Session 建立前 (應用程式首次被引用) |
| Application_OnEnd | 所有 Session 結束、應用程式關閉時 |
線上人數計數器完整範例 (Global.asa)
<script language="vbscript" runat="server">
Sub Application_OnStart
Application("visitors") = 0
End Sub
Sub Session_OnStart
Application.Lock
Application("visitors") = Application("visitors") + 1
Application.UnLock
End Sub
Sub Session_OnEnd
Application.Lock
Application("visitors") = Application("visitors") - 1
Application.UnLock
End Sub
</script>
顯示線上人數 (任意 ASP 頁面)
<p>目前線上人數: <%= Application("visitors") %> </p>
現代架構建議:分散式系統請改用 Redis、Memcached 或資料庫計數器,避免單點故障與記憶體限制。ASP.NET Core 內建 IDistributedCache 介面支援多種快取後端。