こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

sessionスコープとapplicationスコープ

の違いを教えてください。

sessionスコープ:
HTTPセッション間でデータを共有したい場合に使用します。これにより、異なるページ間でブラウザを閉じるまで、もしくは一定時間経過するまでデータを共有することができます。

applicationスコープ:
webアプリケーション間でデータを共有したい場合に使用します。webアプリケーション間とは、サーブレットコンテナに設定されるwebアプリケーション内のことを言います。

ではよく分からないのでどちらがより広いのかどういう場合にどっちなのかを具体的に教えてください。

投稿日時 - 2007-06-26 07:20:06

QNo.3116451

暇なときに回答ください

質問者が選んだベストアンサー

まず決定的に違うのがライフサイクルです。

'applicationスコープ'と呼ばれる領域はそのコンテキストが所属するコンテナが尊属する限り永続的に存在します。
つまりアプリケーション開始から終了まで有効、ということです。
そしてそれはアプリケーション(あなたの言うコンテキスト)で唯一です。

'sessionスコープ'と呼ばれる領域はJ2EE-APIがあるトリガをもとに生成する時限付メモリ空間です。
これは1つの領域に対してセッションIDと呼ばれるキーで複数存在します。
セッションタイムアウトによって設定された時間を過ぎるとセッションマネージャによりパージ(消去)されます。


例えばアプリケーションにひとつしか必要ないものがあった場合はapplicationスコープに保管しておくとよいでしょう。
変更することがないマスタやシステム固有のシグネチャなどがこれにあたります。
sessionスコープには通常ユーザに紐付いた情報を保管します。
ユーザのログイン時間やユーザIDから取得したプロファイルなど。
ショッピングサイトによくあるカート情報などもこれにあたるでしょう。
もっともそれらのすべてはアプリケーションの設計段階で綿密に考慮される内容です。

投稿日時 - 2007-06-27 14:07:52

お礼

詳しい説明ありがとうございます。

投稿日時 - 2007-06-27 18:54:13

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

applicationとsessionは包含関係にありません。
applicationスコープは、アプリケーションで一つなので別ブラウザから呼ばれてもアクセスできます。

投稿日時 - 2007-06-26 18:27:12

補足

ありがとぅございます。
アプリケーションスコープの変数はコンテキスト間では共有しないのでしょうか?

投稿日時 - 2007-06-26 20:57:25

ANo.1

まずは、HTTPセッションとは何かを理解してますか?
それが分かれば、必然と答えはでます。
質問の文章を読めば答えはでてると思うのですが、具体的に何が分からないんでしょうか?

参考URL:http://www.atmarkit.co.jp/fjava/rensai3/tomcat09/tomcat09_02.html

投稿日時 - 2007-06-26 11:23:05

補足

ありがとうございます。
ブラウザによって呼ばれたサーバが保存したセッション変数は他のブラウザから呼ばれたサーバがアクセスできないものと思っています。
application変数は他のブラウザによって呼ばれたサーバからアクセスできるのでしょうか?
sessionのスコープよりもapplicationのスコープのほうが広いのかどうかが分かりません。
これらのスコープは包含関係にないのでしょうか?

投稿日時 - 2007-06-26 13:06:02

あなたにオススメの質問