ASP イントラネット
   【 セッションの利用 】
1. セッションの意義
2. セッションが有効かどうかの確認
3. セッションオブジェクトへのデータの格納と参照
4. Session.Contents コレクション
5. セッションオブジェクトの明示的な破棄と注意

1 (サーバ) 対 n (クライアント)での必須機能
  • 昔から、オンラインシステムで実装されている機能であり、決して特別なもの
    ではありません

  • プログラマにとっての意義は、クライアント毎のデータを保存する機能にあり
    ます。それは、一見クッキーで実装できそうに思えますが、保存量や本来の
    クッキーの目的を考えれば妥当ではありません

  • 但し、セッションの機能がクッキーに依存しているのも事実であり、クッキー
    が有効で無い場合 ASP のセッションオブジェクトは意味を成さなくなります

  • アプリケーションから見た意義は、セッションが一定時間継続して維持される
    というところです。IIS では、セッションがタイムアウトするまでは継続されま
    す。この時間は、アプリケーションのオプションで設定された値がデフォルトと
    なって、Session.Timeout プロパティで変更する事ができます

  • 結果的に、プログラマはページ間を意識せずにデータを保持する事ができる
    ようになり、あたかも、クライアントのメモリを使っているかのようなプログラミ
    ングが可能になります

  • 唯一注意すべきは、セッションがタイムアウトしているのにも関わらず、データ
    が保持されているという前提でプログラミングしてしまう事です


  • 以下のコードで簡単に確認できます

  • <%
    	Response.Write Session.SessionID
    %>
    
  • ページを更新しても値が変わらないようであれば、セッションは有効です
  • Session( "Key" ) = Value で簡単に使用できます

  • また、Set Session( "Key" ) = Object でオブジェクトのインスタンスを格納できます

  • それぞれ、Sessoion( "Key" ) で、Value や Object を参照できます

  • Session オブジェクトに組み込みオブジェクトを格納することはできません。たとえば、次のような
    スクリプトはすべてエラーを返します
  • <%
    Set Session("var1") = Session
    Set Session("var2") = Request
    Set Session("var3") = Response
    Set Session("var4") = Server
    Set Session("var5") = Application
    %>
    
  • Session オブジェクトに 配列を格納した場合は注意 が必要です。その場合は、直接値を
    セットせずにいったんローカルの変数に戻してから値を変更してSession オブジェクトに格
    納しなおす必要があります
  • Request.Form や Request.QueryString に相当するコレクションです。コレクションとしての
    通常の列挙が可能です
  • <%
     
    	For Each ItemName In Session.Contents
    		On Error Resume Next
    		FileHandle.WriteLine( ItemName & "," & Session.Contents( ItemName ) )
    		On Error Goto 0
    	Next
     
    %>
    

  • Session.Abandon メソッドで明示的に破棄が可能ですが、スクリプトが終了するまでは破棄されません
    つまり、Abandon を呼び出したページ内であれば Session オブジェクト内の変数にはまだアクセスする
    ことができます

  • これに反して、Contents.RemoveAll や Contents.Remove では、即削除されます
  • <%
     
    	Session("TEST") = "ABC"
    	Session.Abandon
    	Response.Write "Abandon 後 --> " & Session("TEST") & "<br>"
    	Response.Write "Abandon 後の数 --> " & Session.Contents.Count & "<br>"
    	Session.Contents.RemoveAll( )
    	Response.Write "RemoveAll 後 --> " & Session("TEST") & "<br>"
    	Response.Write "RemoveAll 後の数 --> " & Session.Contents.Count & "<br>"
     
    %>
    
  • 以下は実行結果です
  • Abandon 後 --> ABC
    Abandon 後の数 --> 1
    RemoveAll 後 --> 
    RemoveAll 後の数 --> 0
    






     





       index_php