QA@IT
«回答へ戻る

コメントに対する回答を追記しました

5599
 
 JSPのスコープをちゃんと使いこなせてますか? 
 http://www.atmarkit.co.jp/ait/articles/0701/20/news017.html
+
+----
+
+# 追記
+
+単純に『アプリケーションスコープの変数に買い物カゴ情報を格納しておけば、別のセッション(や別のPC)でアクセスしても買い物カゴ情報が再び取り出せるか。』
+という点についてはYesです。
+
+ただし以下の課題は残ります
+* サーバーが再起動すれば消える。サーバーが複数台あった場合に共有させる必要がある。
+* いつ消してよいかわからないのでアプリケーションが動作したままだと残り続ける。
+    * ユーザーが増えた場合どんどんメモリを消費していくことに
+* セッションが異なっても見える=すべてのユーザーがアクセスできる領域に情報をおいている=なにかの間違いでほかのユーザーの情報が見えるリスクがある。
+
+
+HTMLはステートレス(状態が保存できない)です。それをステートフル(状態保存を可能にする)ためにセッションや、アプリケーションスコープなどの機能があります。
+どこに何を保存するか、どこに保存するとどいうメリデメがあるかはいろいろとありますので一概にどれがよいとも言えません。
+ただ個人的には、ユーザーのデータをwebアプリケーション全体で共有するのはあまりいいプラクティスではないように思います。

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

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

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

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

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


追記

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

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

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

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

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

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

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

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

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

----

# 追記

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

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


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

回答を投稿

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

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

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

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

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

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

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

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

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

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