- ベストアンサー
セッションにはどんなデータを保存するべきか
セッションにどんなデータを保存していいのかよくわかりません。 私はセッションというのはプログラムでいうところのstatic変数みたいな物かと考えているのですが、 この認識であっているでしょうか? 具体的にはセッションにはユーザID等のWebシステム上全体で保持するべき値のみが許されて、A,B,Cの3つの画面間でのみ共有するような値はセッションに保存してはいけないという具合です。 抽象的な質問ですが、よろしければご回答下さい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>そうだったんですね。~ あくまでも私の場合は、ということです。 人それぞれのポリシー・やり方があってもよいとは思います。 >不要になければすぐ削除する必要性がある 誤解を与えてしまいました。そういうつもりはなく、あくまでも 「どの時点で削除するか等ある程度の規則を自分で決めておくと管理しやすくなる」という規則の一例としてです。 参考になるかどうか分かりませんが自分の場合は大きく以下に分けられる感じで、不要な情報も保持していることも多々あります。 1.ログインIDなど全体を通して使用する情報 2.全ページに渡って使用する「かもしれない」情報/あると便利な情報。 (使用の如何に関わらずコントローラ側で発行) 3.各処理/クラスでその場だけで使用する情報 >これは大変なことではないのでしょうか 各クラスで処理すれば、そこで関係のない変数をいじることはありませんから混乱することもないかと。 >クライアントがブラウザの戻る(キャッシュ)からアクセスしてきた場合も~ REFERERについてだと思いますがもちろんその通りです。ブラウザの情報よりは信頼できるという意味で、正当なページからの送信以外は受け付けたくない場合に参照するという感じです。 あくまでもセッションの使用方法の一例としてあげました。 質問からはズレて余計なことかも知れませんが。 基本的に、セッションを使用するかどうかは各クラスにまかせるべきで、質問者さまが直接的に考えてはいけないように思いますよ。(もちろん各クラスでの処理を書く場合は考える必要がありますが)
その他の回答 (1)
- JaneDue
- ベストアンサー率75% (263/350)
>static変数みたいな物~ 一連のアクセス全体を通してみればそう言えるでしょう。 >A,B,Cの3つの画面間でのみ共有するような値はセッションに保存してはいけない~ 自分の場合はそうでもないですね。 かえって「A,B,Cの3つの画面間」程度で使用するケースが多い感じです。 例えば、ショッピングカートでカゴに入れてから、内容の確認/変更・送信までセッションを使用しなければ、いちいちファイルやデータベースに保存/読み込み/書き換えしなければなりません。 更に中途半端に残ったデータの掃除も大変です。 その他 ・ログイン失敗の回数(上限に達したら一旦すべて拒否するなど) ・意図した通り画面遷移しているか (ブラウザのREFERERは信用できないので自前で発行する等) ・CSRF(外部から不正にPOSTされていないか等)対策のため一時的なトークンの発行/検証 ・二重投稿の防止 などなど…。 小便利な反面、確かに安易に使用しがちで煩雑になりやすい嫌いもありますが、変数は各クラス名のハッシュに入れる/不要になければすぐ削除する等一定の規約に従って管理すればよいかと。
補足
お返事ありがとうございます。 <<かえって「A,B,Cの3つの画面間」程度で使用するケースが多い感じです。 そうだったんですね。私もそうでないかとは思っていたんですが、この場合に少し気になる点があります。 それは、 <<小便利な反面、確かに安易に使用しがちで煩雑になりやすい嫌いもありますが、変数は各クラス名のハッシュに入れる/不要になければすぐ削除する等一定の規約に従って管理すればよいかと。 でも言われている通り、不要になければすぐ削除する必要性があるという点なのですが、これが難しいと思うのです。 具体例をあげると、1つの画面にログオフ、商品詳細、登録等の複数のリンクがあることもめずらしくなく、その先の個々のアクションでセッションを消さなければ(場合によっては残す)いけないと思いますが、これは大変なことではないのでしょうか?またクライアントがブラウザの戻る(キャッシュ)からアクセスしてきた場合も考える必要性があると思います。 これらを解決するためのなんらかの手段があるとは思うのですが、その辺りがよくわかりません。 別の質問となってしまいましたが、もしよろしければご意見いただけると幸いです。
お礼
確かにひとつひとつ丁寧に書いていけばセッション管理はそこまでやっかいではない、かもしれませんね。この回答を参考に、セッションの使い方について検討させていただきます。 <<質問からはズレて余計な・・・ 私の立ち位置を説明していなかったようで、誤解を与えました。 私は新人研修で簡単なWebシステムを一つ作るという課題を与えられていたので、このような質問となりました。 ご丁寧なお返事ありがとうございました。