# Session

## Session

### Glabal.asax 檢查 Session

參考資料:([https://blog.miniasp.com/post/2008/12/05/How-to-check-ASPNET-Session-is-available-in-Global-asax.aspx](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/en-us/library/ms952597.aspx))

參考資料:([https://msdn.microsoft.com/zh-tw/library/system.web.httpcontext.session(v=vs.110).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://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://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](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](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](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;
}
```
