4月28日(火)1、2コマ目
今日の予習
Sessionオブジェクトをつかうために
Sessionオブジェクトを使う際はProgram.csを編集する必要がある。
今日、やったこと
- [おさらい]Razorページ+DB(DBNull、null許容型)
- Sessionオブジェクト
今日のホワイトボード
[おさらい]Razorページ+DB(DBNull、null許容型)
正解例をあげておきます。
Group.cs
cs_グループマスタテーブル情報受け渡し用クラス。
Item.cs
cs_商品マスタテーブル情報受け渡し用クラス。
価格列はnullな可能性あり。Priceプロパティはnull許容型に。
GroupDAO.cs
cs_グループマスタテーブルアクセス用クラス。
ItemDAO.cs
cs_商品マスタテーブルアクセス用クラス。
価格列がnullな行がある。OracleDataReaderはnullな場合は、DBNullを返す。
|
| 図 DBがnull DataReaderはDBNullを貸す |
Index.cshtml.cs
とくにややこしいことはないかと。
Index.cshtml
ItemクラスのPriceプロパティはnull許容型。nullの場合は空白文字列を出力したい。
|
|
図 ?演算子(Null条件演算子)、??演算子(Null合体演算子) |
[Sessionオブジェクト]HTTPはステートレスなプロトコル
HTTPは
- リクエスト
- レスポンス
の1往復で完結するプロトコル。
よって、複数のやり取りでデータを共有する仕組みはない。
|
| 図 HTTPの仕組み |
[Sessionオブジェクト]リクエスト間でデータを共有したい
HTTPだけでは無理なので、プログラムを動かすアプリケーションサーバー側で対応。
WebサーバーはHTTPのやり取りのみ。
アプリケーションサーバーで、C#のプログラムを動かす。
|
| 図 HTTP担当のWebサーバー、Webサーバーを補うアプリケーションサーバー |
[Sessionオブジェクト]サンプルアプリケーション
うどんを選択する度に下部の一覧に追加されるようにしたい。
選択うどん情報を保持し続ける必要がある。 =>
Sessionオブジェクトを使う。
|
| 図 作成したサンプルアプリケーション |
[Sessionオブジェクト]Sessionオブジェクトは
サーバー側に用意される各クライアントから送信されるデータをクライアント別に保存する仕組み。
Sessionオブジェクトの識別子SessionIdをサーバーとクライアント間で共有する。
|
| 図 Sessionオブジェクトはクライアントごとに用意される |
[Sessionオブジェクト]SessionIdのやり取り
クライアントはサーバーから送信されるSessionIdをWebブラウザの(cookie)に保存する。
|
| 図 サーバー、クライアント間でのSessionIdのやり取り |
[Sessionオブジェクト]Sessionオブジェクトにデータを保存、取り出し
SessionオブジェクトはJavaScriptの連想配列と同じように、
キー と 要素
が紐づく。
|
| 図 Sessionオブジェクトにデータを保存、取り出し |
ソースコード
Sessionオブジェクトを使うアプリケーションのソースをあげておきます。
Program.cs
Sessionオブジェクトを使うには、Program.csに設定が必要。
Index.cshtml.cs
sessionオブジェクトにアクセス => HttpContext.Session
Index.cshtml
Index.cshtmlでもHttpContext.Sessionにアクセス可。
[おまけ]Listがnullではなく かつ 要素があるかチェック
ポイントは null > 0 はfalse になる。
|
| 図 Listがnullではなく かつ 要素があるかチェック |
次回は
Sessionオブジェクトの練習問題。








