Session

Session

Glabal.asax 檢查 Session

參考資料:(https://blog.miniasp.com/post/2008/12/05/How-to-check-ASPNET-Session-is-available-in-Global-asax.aspx)

應用 HttpContext.Session

參考資料:(https://msdn.microsoft.com/en-us/library/ms952597.aspx)

參考資料:(https://msdn.microsoft.com/zh-tw/library/system.web.httpcontext.session(v=vs.110).aspx)

Error

https://stackoverflow.com/questions/35425835/session-state-is-not-available-in-this-context-in-global-asax

https://www.codeproject.com/Articles/16171/An-HTTP-Module-for-ASP-NET-Error-Handling

https://stackoverflow.com/questions/276355/can-i-access-session-state-from-an-httpmodule

web.config 設定 timeout 單位 mins

參考資料:(https://stackoverflow.com/questions/1205828/how-to-set-session-timeout-in-web-config)

<configuration>
  <system.web>
     <sessionState timeout="20"></sessionState>
  </system.web>
</configuration>

可以用創建一個簡單的 .aspx ,在 Page_Load 裡面

Response.Write(Session.SessionID);
您在timeout屬性中設置的值是設置會話超時值的正確方法之一。

該timeout屬性指定會話在放棄之前可以閒置的分鐘數。此屬性的默認值是20。

通過為此屬性分配值1,您將會話設置為在閒置後1分鐘內放棄。

為了測試這個,創建一個簡單的aspx頁面,並將這些代碼寫入Page_Load事件中,

Response.Write(Session.SessionID);
打開瀏覽器並轉到此頁面。會話ID將被打印。等待一分鐘,然後刷新。會話ID將改變。

現在,如果我的猜測是正確的,那麼您希望在會話超時後立即讓用戶註銷。為此,您可以創建一個登錄頁面來驗證用戶憑證,並創建一個像這樣的會話變量 -

Session["UserId"] = 1;
現在,你將不得不在每個頁面上對這個變量進行檢查 -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");
這是如何工作的一個簡單例子。

但是,為了製作高質量的安全應用程序,請使用ASP.NET提供的角色和成員資格類。他們提供基於表單的身份驗證,這是您正在嘗試使用的正常基於會話的身份驗證更可靠。

代理伺服器導致掉Session

參考資料:(https://www.mdeditor.tw/pl/p17B/zh-tw)

要設定 放行Cookie 相關的參數,不然會被擋掉

nginx proxy_cookie_path

location /health-dev/ {
    proxy_pass  http://192.168.40.202:8080/health/;
    proxy_cookie_path  /health /health-dev;
}

Last updated