什麼是 GAS Session?

GAS(Genero Application Server)的說明文件中,頻繁提及「Session」這個詞,卻鮮少明確定義它的含義。本文透過 GAS 架構來釐清這個概念。

當一個 Web 應用程式啟動時,系統會同時啟動一個 VMProxy(uaproxy)程序和一個 DVM(fglrun)程序。若初始程式透過 RUN 指令再啟動其他 Genero 應用,這些應用都屬於同一個 Session,由同一個 Proxy 統一管理。「Proxy 與這兩個 DVM……被包含在紅色矩形框內,那就是一個 Session。」Session 會持續存在,直到最後一個 fglrun 程序結束為止。

什麼是 Session Id?

Session Id 是一個由十六進位字元(0-9、a-f)組成的 32 字元唯一識別碼,例如:

51568e839b386af02bfefcae7c5300f9

Session Id 出現在哪些地方?

  • GAS 日誌檔名(uaproxy-sessionid.logvm-sessionid.log
  • X-FourJs-id Cookie 的值
  • HTTP 通訊路徑(POST /ua/sua/sessionid.
  • GAS 監控介面的顯示內容

如何在程式中取得 Session Id?

程式可以透過以下方式取得自身的 Session Id:

FGL_GETENV("FGL_VMPROXY_SESSION_ID")

這個值可以寫入稽核資料表(audit table),讓管理員在使用者回報問題時,能快速定位到對應的日誌檔案,大幅縮短排查時間。

AUTO_LOGOUT 與 Session 管理

AUTO_LOGOUT 設定控制的是整個 Session 層級的閒置逾時強制登出,而非個別應用程式。uaproxy 程序負責監控它所管理的所有程式的閒置狀態,只要其中有任何一個程式仍在活動,計時器就不會觸發。

Session Directory 設定

若環境中部署了多個 Dispatcher,每個 Dispatcher 必須設定不同的 SESSION_DIRECTORY,以避免在重新啟動並重建連線時發生路徑衝突。

負載平衡的注意事項

Genero Web 應用程式需要使用「Session 綁定」的負載平衡(Session-bound load balancing),以確保同一個 Session 的所有請求都能到達相同的 GAS 與 fglrun 程序。Web 服務(Web Services)的要求相對寬鬆,除非使用了 Sticky Web Services,否則不需要 Session 綁定。

總結

對於 Web 應用程式而言,每次透過瀏覽器輸入新的 URL、點擊連結,或執行 launchUrl,都會建立一個新的 Session,並產生一個唯一的識別碼。這個識別碼可在 HTTP 流量與日誌檔案中觀察到,是日常維運與問題排查的重要工具。

原文:https://4js.com/ask-reuben/ig-240/  ·  有任何 Genero 技術問題或翻譯疑問,歡迎來信 support@t100.app