QA@IT

アプリケーションスコープについて

5264 PV

お世話になります。
アプリケーションスコープについて質問させていただきます。
アマゾンなどのサイトで一度買い物カゴに入れた商品は、セッションが切れても次回アマゾンにアクセスすると、
買い物カゴに残っています。これは買い物カゴがアプリケーションスコープで扱われているという事でしょうか?
もし違うとしたら、スコープはページなのですか。その場合、アプリケーションスコープとはどのようなものか例を教えて下さい。

  • コメントにたいする回答を追記しました。 -

回答

提示された買い物カゴの例では、どのように実装しているか次第でスコープは関係ありません。
「買い物カゴに変化があるたびにユーザー用のDBテーブルに保存」
「買い物カゴ表示の度にDBから取得」
すればセッションすら不要です(例えばの話ですよ)。

クッキーを使ったり、HTML5であればストレージを使う事もあったり、そもそもセッションが切れていない可能性もあります。
また、アプリケーションスコープであったとしても次回ログオン時はロードバランシングによって別のサーバーに振り分けられる可能性もありますので、セッションが切れた後でもカゴに残っている=アプリケーションスコープであればよいとはいかない部分も出てきます。

カゴの動きがどうであるかとスコープがどうであるかは関連性がありません。

質問で出てきているページスコープ、セッションスコープ、アプリケーションスコープはおそらく jspのものを指していると思いますのでそれについては以下が参考になるのではないでしょうか。

JSPのスコープをちゃんと使いこなせてますか?
http://www.atmarkit.co.jp/ait/articles/0701/20/news017.html


追記

単純に『アプリケーションスコープの変数に買い物カゴ情報を格納しておけば、別のセッション(や別のPC)でアクセスしても買い物カゴ情報が再び取り出せるか。』
という点についてはYesです。

ただし以下の課題は残ります

  • サーバーが再起動すれば消える。サーバーが複数台あった場合に共有させる必要がある。
  • いつ消してよいかわからないのでアプリケーションが動作したままだと残り続ける。
    • ユーザーが増えた場合どんどんメモリを消費していくことに
  • セッションが異なっても見える=すべてのユーザーがアクセスできる領域に情報をおいている=なにかの間違いでほかのユーザーの情報が見えるリスクがある。

HTMLはステートレス(状態が保存できない)です。それをステートフル(状態保存を可能にする)ためにセッションや、アプリケーションスコープなどの機能があります。
どこに何を保存するか、どこに保存するとどいうメリデメがあるかはいろいろとありますので一概にどれがよいとも言えません。
ただ個人的には、ユーザーのデータをwebアプリケーション全体で共有するのはあまりいいプラクティスではないように思います。

編集 履歴 (1)
  • field_onionさん、いつもお世話になります。すみません。JSPのスコープは使うコードは書いたことがありませんでした。そういえば、アプリケーションスコープについて検索するとJSPでの表示ばかり出てくるので、そこで気づくべきでした。買い物カゴの変化や表示のたびにDBから取得する発想は、ちょっと考えれば思いつきそうですが、そういう実践がなかったので、セッションしか知りませんでした。残念です。 -
  • クッキーを使うことや、HTML5のストレージを使うなども経験がないので、調べてわかるか疑問ですが、これから調べてみます。もし判らなかったら、もし判らなかったら、またコメントしてもよろしいでしょうか?少し時間を下さい・・・。 -
  • クッキー、HTML5のストレージ、サーバーのロードバランシングなど調べて大まかな意味は掴めました。実際にどういうコードを書いてクライアント情報を取得するかは、いずれ取得しなければならない課題になりました。ヒントを戴いて有難うございます。 -
  • ただ、アプリケーションスコープはWEBアプリケーションス全体でデータを共有するという事で、他のPCとも共有する(他のパソコンでログインしても・・・つまり、すなわち次回のログオン時にも買い物カゴに残っている)という事でしょうか?最後に一点教えて下さい。 -
  • 回答に追記しました -
  • 「> またコメントしてもよろしいでしょうか?」 そういう場ですのであまり気にしないでいいですよ。私のサイトでもないですし。
    私も時間があるときに回答できそうなものに回答しているだけですからあまりお気になさらず。
    -
  • 追記有り難うございます。お蔭様で、なぜエンタープライズ向けの開発でステーフルセッションビーンが使われるかわかったような気がします。また機会がありましたらご助言下さい。御礼申し上げます。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。