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オブジェクトの練習問題。


このブログの人気の投稿

5月12日(火)1、2コマ目

4月14日(火)1、2コマ目