StateBag.Item[]

StateBagも、インデクサに対応してるので、キーを変えることで複数登録できる。

StateBag.Item[String] プロパティ (System.Web.UI) | Microsoft Docs

Default.aspxで、

Labelを2つに増やして、
Default.aspx.csは、

"data1"と"data2"で値を別々に登録。

何度押しても2つとも出てくる
何度押しても2つとも出てくる

何度押しても2つとも出てくる。

Sample/aspnet/StateBag/Item/src/StateBag_ at master · bg1bgst333/Sample · GitHub

StateBag

Control.ViewStateの実体はStateBag。

StateBag クラス (System.Web.UI) | Microsoft Docs

HttpSessionStateと同じように保存できる。
Default.aspxで、

LabelとButton。
Default.aspx.csで、

このようにすると、

まあ何度押しても出る。
まあ何度押しても出る。

まあ何度押しても出る。

Sample/aspnet/StateBag/StateBag/src/StateBag_ at master · bg1bgst333/Sample · GitHub

Control.ViewState

サーバーサイドでの保存がSessionなら、クライアントサイドでの保存はViewState。

Control.ViewState プロパティ (System.Web.UI) | Microsoft Docs

基本的には、ビューの状態をクライアント側で保持しておく為のものだけど。
Default.aspxで、

ViewStateの型を出してみる。

StateBagかな
StateBagかな

StateBagかな。

Sample/aspnet/Control/ViewState/src/Control_ at master · bg1bgst333/Sample · GitHub

HttpSessionState.Timeout

HttpSessionState.Timeoutでタイムアウト値を設定できる。

HttpSessionState.Timeout プロパティ (System.Web.SessionState) | Microsoft Docs

単位は分。
Default.aspx.csで、

Session.Timeoutを1に。

この状態から1分以上経ってから、Button1を押すと、
この状態から1分以上経ってから、Button1を押すと、

この状態から1分以上経ってから、Button1を押すと、

こうなる。
こうなる。

こうなる。

Sample/aspnet/HttpSessionState/Timeout/src/HttpSessionState_ at master · bg1bgst333/Sample · GitHub

HttpSessionState.Item[]

HttpSessionStateは、インデクサに対応してるので、キーを変えることで複数登録できる。

HttpSessionState.Item[] プロパティ (System.Web.SessionState) | Microsoft Docs

Default.aspxで、

Labelを2つに増やして、
Default.aspx.csは、

"data1"と"data2"で値を別々に登録。

最初はこう
最初はこう

最初はこう。

押しても変わらない
押しても変わらない

押しても変わらない。

5分経つと消える
5分経つと消える

5分経つと消える。

Sample/aspnet/HttpSessionState/Item/src/HttpSessionState_ at master · bg1bgst333/Sample · GitHub

HttpSessionState

HttpSessionStateオブジェクトであるPage.Sessionプロパティは、Dictionary形式でキーを指定して値の取得や設定ができる。
セッションが切れない限りは、Page.Sessionの値はサーバ側で保持される。

HttpSessionState クラス (System.Web.SessionState) | Microsoft Docs
第15回 セッションとビューステート:連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― (2/3 ページ) - @IT

Default.aspxで、

LabelとButton。
ButtonはPostBackしたいだけなのでハンドラは不要。
Default.aspx.csで、

PostBackではない最初のロード時に値をセット。
Timeoutはデフォルトで20分って上記の記事にあったけど、20分じゃ切れなかったので、5分にセット。

最初はこう
最初はこう

最初はこう。

Button1を押しても、セッションが切れてなければ、"ABCDE"は表示される。
Button1を押しても、セッションが切れてなければ、"ABCDE"は表示される。

Button1を押しても、セッションが切れてなければ、"ABCDE"は表示される。

5分経った後だと、セッション切れてるから、"ABCDE"も消失。
5分経った後だと、セッション切れてるから、"ABCDE"も消失。

5分経った後だと、セッション切れてるから、"ABCDE"も消失。

Sample/aspnet/HttpSessionState/HttpSessionState/src/HttpSessionState_ at master · bg1bgst333/Sample · GitHub

Page.Session

ASP.NETが持っているセッション情報は、Page.Sessionで取得する。

Page.Session プロパティ (System.Web.UI) | Microsoft Docs
第15回 セッションとビューステート:連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― (2/3 ページ) - @IT


まずは、このオブジェクトの型を調べる。
Default.aspxで、

とすると、

Page.Sessionの正体はHttpSessionState
Page.Sessionの正体はHttpSessionState

Page.Sessionの正体はHttpSessionState。

Sample/aspnet/Page/Session/src/Page_ at master · bg1bgst333/Sample · GitHub