ViewState と Session の使い分け

概要

データを一時的に保持したり、画面間で受け渡したりするとき、 ASP.NET (C#VB.NET の両方) では ViewState と Session を使います。ここではそれぞれを利用するときの注意点と使い分けを説明します。*1

ViewState 利用時の注意点

ViewState の利用には、以下の注意点があります。

  • シリアル化できるオブジェクト (基本型や DataSet など) だけを利用する
  • 巨大なデータを格納しない
  • (基本的には、) セキュリティを要求されるデータを格納しない
    • web.config の設定で暗号化可能だが、パフォーマンスが著しく低下する

Session 利用時の注意点

Session の利用には、以下の注意点があります。

  • シリアル化できるオブジェクト (基本型や DataSet など) だけを利用する
  • 1アクセスユーザあたりのデータ量を 50 から 100 KBまでにする
    • もう少し多くても問題は起こりにくいが、パフォーマンスをトラッキングして調整する
    • XmlSerializer クラスを使うことで、容量の概算がわかる
  • 不要になったデータは、明示的に Remove() する
    • サイズの拡張を防ぐため
    • 画面遷移の最後など、不要になった時点で削除を行う
  • ログアウトのページなどでSession.Abandon()を行う
    • ブラウザが閉じられたことをサーバ側で検出できないため

ViewState と Session の使い分け

ここでは、 ViewState と Session を比較し、基本的な使い分け方について説明します。

ViewState は、以下の条件にマッチする場合に使用します。

  • 画面内だけで利用するデータ
  • 容量が小さいデータ
  • セキュリティが必要ないデータ

Session は、以下の条件にマッチする場合に使用します。

  • 画面間で受け渡すデータ
  • セキュリティが必要なデータ

*1:必須の概要だけ記述します。詳細はキーワードを頼りに MSDN を参照してください。