ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

セッションについて、画面間にわたるデータ交換”以外”の利用法。。。


 Strutsでの画面前処理の話を以前のブログですると書きましたが、その前に、セッションについてまとめておく必要があるので、ちと書いておきます。

 セッションは、画面間で、データを受け渡しするのに、普通使います。
  PHPだとこんなかんじ
  (ただし、Cannot send session cookie(このあとつづく)っていうエラーが出る場合はここ)
  Perlだとこんなかんじ、
  JSPだとこんなかんじで、
  Javaのサーブレットだとこんなかんじ
 とまあ、こんなかんじになります。

 では、セッションでは、なにをやっているのかというとまとめると、結局
・画面間で、データの受け渡しをするのに、サーバー側にデータ置き場を用意しておき、クライアントにセッションIDをわたすことで、どこの置き場のデータを使っているということがわかるようにして、データを受け渡す
 という方法でした。

 つまり、こんなかんじ。


 で、これを実現するためには、クライアントの画面にセッションIDを渡して、クライアントからはそのIDを返してもらわないといけません。
 そのためには、クライアントに
1.クッキーを使ってもらうか
2.セッションIDをURLに設定して(SIDやSessionIDとなるのがふつう)
 とってくるのがふつうです。




 なお、上記の図のように、セッションは、サーバー側にあるものなので、
Javascriptでクライアントからセッションのデータを操作するというのは、
常識的には出来ません(AJAXで非同期でなんかして。。。とか、
そーいうことを、今考えないとして=常識的に)。

 また、別にセッション以外でも、このことと同じことは実現できます。
 1セッションごとにファイルやディレクトリ(=フォルダ)を用意して、
そこに書き出し、セッションIDのかわりに、そのファイル名をクライアント
に受け渡しすれば、OKです。
 もちろんHiddenですべてのデータをわたしてもいいし。。

 この場合のメリットは、AJAXを利用する場合、比較的簡単にサーバ側データ
が取得できるということです。セッションに入っているデータをとってくるというと、
いろんなからくりを作らないと無理っぽそうですが、ファイルをXMLで書き出し、
そのファイル名をクライアント側に渡してしまえば、あとは、フツーのAJAX
でのXML取得の話でs。




 で、今回は、そーいうことをいいたいんじゃなくって、

 クライアント側で、仮にクッキーも受け付けず、URLにもいれない、つまり、セッションは一切使いたくないとしたとします。
 それでも、サーバーからみると、サーバープログラムと、その直後のJSPにおいては、セッションを利用して、データを受け渡すことは可能だということです。

 たしかに、複数画面間のデータ受け渡しにはセッションIDをつかって、セッションをみつけるので、セッションIDがないとこまります。なので、クライアントでセッションIDを受け渡すことを、上記のように拒否された場合、”複数画面間での”データ受け渡しは出来ません。




 しかし、”1画面を出力するまでの”サーバープログラムと直後のJSPの関係においては、クライアントはでてこないので、ここでセッションを利用して、データ共有することは可能です。つまり、”1画面内で複数プログラムがあるときの”データ受け渡しは可能です。

 おなじことが、PHPプログラムにもいえます。
 サーバー側でPHPプログラムが1画面を出力する間に複数動く場合、セッションに処理したデータを突っ込んでしまえば、そのプログラム間でセッションによるデータ共有は可能です。
 ただし、複数画面における画面間でのデータ共有は、クライアント側で、セッションを利用できるように(=クッキーを受け入れるか、URLにセッション番号を付けることをOKとする等)しないとできません。




 この特徴を使って、MVCにプログラムをわけて、各プログラムにおいて、他プログラムに渡したいデータをセッションにいれてしまい、データ共有させたのが、カオル姫方式です。

 ということで、Strutsの話ができそうです。