- PR -

入力項目を保持したままリクエスト結果を別フレームに表示する方法

1
投稿者投稿内容
ひびき
会議室デビュー日: 2004/11/09
投稿数: 18
投稿日時: 2005-03-08 11:37
いつも勉強させていただいています。

入力項目に入力した情報を表示したまま、リクエスト結果を別フレームに表示する方法がないかと考えています。
現在の希望としては、ユーザ認証を行った後検索を実行し、セションタイムアウトが発生した後にはもう一度ユーザ認証を行い、それまでに入力していた内容をそのまま利用したいと考えていますので、セションオブジェクトに入力情報を保持させる方法以外の実現方法を探しています。

なにかよい方法があれば、ご教授ください。
よろしくお願いいたします。


raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2005-03-08 11:46
ひびきさん、こんにちは。

データベースにデータをスタックしておいて、使用するってのはどうでしょうか。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2005-03-08 11:49
こんにちわ。

簡単ですが

1.セッションのタイムアウトをリスナーで検知
2.Singletonなどの管理系オブジェクトにタイムアウト時の項目を格納(ユーザ情報(一意)と関連づけ)
3.ログイン後、自分の情報がないか管理オブジェクトに問い合わせ
4.あれば、それをもらう。なければ新規ログインとみなす。
# 管理系オブジェクトでもタイムアウトを設ける等必要

もっと良い方法があるかも。いやあるような。あるでしょう。
ちなみにセッションのタイムアウト時にリスナーでオブジェクトを取得するためには
ServletAPIのバージョンが**(失念)以上じゃないといけないとかあったような気が
します。

管理系オブジェクトを自作しなくても保存場所はRDBMSでもServletContextでもいいよう
な気はします。お好みで。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2005-03-08 11:58
引用:

入力項目に入力した情報を表示したまま、リクエスト結果を別フレームに表示する方法がないかと考えています。



これだけ聞くと、actionのtargetを明示してやればそれでいいように思うのですが、違うのですか?
#で、セッションタイムアウトしているなら、結果が表示されるはずだったフレームで再ログインを行わせる。で、その後もう一度ボタンを押させる……のはさすがに無駄な気がするので、ログイン完了画面からJavaScriptでsubmitさせるとか。

引用:

現在の希望としては、ユーザ認証を行った後検索を実行し、セションタイムアウトが発生した後にはもう一度ユーザ認証を行い、それまでに入力していた内容をそのまま利用したいと考えていますので、セションオブジェクトに入力情報を保持させる方法以外の実現方法を探しています。



「ユーザー認証」というのは、自前作った認証機構ですか?もしそう(自前)なら、認証が必要であると判断された時のリクエスト内容を認証中ずっと持ちまわって、認証後に渡してやるようにする方法があると思います。コードはちょっと面倒ですが……。

もし、限定少数のユーザーが使う業務アプリケーションならば、一番簡単なのは「(少なくとも業務時間中は)セッションタイムアウトしないように設定を変更する」だと思います。
ひびき
会議室デビュー日: 2004/11/09
投稿数: 18
投稿日時: 2005-03-08 15:42
raystarさん、お返事ありがとうございます。

データベースにストックするというのは私も考えたのですが、
アクセス負荷の点から利用してはいけないとのことだったので、
別の方式にしようと考えています。



(株)ぽちさん、お返事ありがとうございます。

Singletonですか。
今まで使った事が無かったので思いつきませんでした。。
一度試してみたいと思います。



永井和彦さん、お返事ありがとうございます。

actionのtargetを明示するだけだと、入力情報って消えてしまわないでしょうか?
リクエスト結果を表示後も入力内容を保持しておきたいのですが。。。

>「ユーザー認証」というのは、自前作った認証機構ですか?もしそう(自前)なら、認証が必要であると判断された時のリクエスト内容を認証中ずっと持ちまわって、認証後に渡してやるようにする方法があると思います。コードはちょっと面倒ですが……。

認証機構は自前のものではなく、こちらで改修することは出来ないため、
この方法もちょっと難しいかと思います。。。

>もし、限定少数のユーザーが使う業務アプリケーションならば、一番簡単なのは「(少なくとも業務時間中は)セッションタイムアウトしないように設定を変更する」だと思います。

こちらも、セキュリティ規約によって、セション保持時間は30分と決まっているため、
実現はできないのです。

(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2005-03-08 16:23
引用:

Singletonですか。
今まで使った事が無かったので思いつきませんでした。。
一度試してみたいと思います。



Singletonを調べたりしているヒマもないようでしたら
補足してますが、ServletContextでも手軽に代用できる
のでよろしいかと思います。

あとは管理の仕方(ロジック)次第かと。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2005-03-08 16:56
引用:

actionのtargetを明示するだけだと、入力情報って消えてしまわないでしょうか?
リクエスト結果を表示後も入力内容を保持しておきたいのですが。。。



絵が描けないので言葉で説明します。ちょっと分かり難いかも知れませんがご容赦を。

画面の上半分が検索条件入力領域です。画面の下半分が検索結果表示領域です。
検索条件入力領域のfromのaction先として検索結果表示領域が明示されています。
ここで、検索条件入力領域で「検索」ボタンを押します。
検索結果表示領域のみが書き換えられます。検索条件入力領域はそのまま(検索ボタンを押す前のまま)です。

検索条件入力領域はリクエストを出すだけでレスポンスを受け取らないので、Server側で何もしなくてもずっと状態が残ります。

……という意味です。

「セッション切れです。再ログインしてね」と表示する場合も、それが表示されるのは検索結果表示領域であって、検索条件入力領域は何も影響を受けません。ただ、クッキーは共有するので、検索結果表示領域で再ログインした恩恵は検索条件入力領域も受けることが出来ます。
#クッキーでのセッションID管理が前提になってしまいますが

何か大きくひびきさんの事情を勘違いしたりしてますでしょうか?

以下余談。

引用:

>もし、限定少数のユーザーが使う業務アプリケーションならば、一番簡単なのは「(少なくとも業務時間中は)セッションタイムアウトしないように設定を変更する」だと思います。

こちらも、セキュリティ規約によって、セション保持時間は30分と決まっているため、
実現はできないのです。



規約ということですので原則従うしかないとは思いますが、個人的にはこの規約は怪しいと思います。セッション保持時間30分というのはデフォルト設定としてよくある数字です。
なんか、大した根拠も無く「この前作った(/作ってもらった)やつがそうだったから、とりあえず全部それと同じでいいや」程度で決まっているような気がします。

セキュリティの話をするのなら、30分も放置出来る時点で変だと思います。例えば、私が行ったいくつかの現場では「3分放置でスクリーンセーバーによるロックが起動すること」とか、そういうのが多かったです。

まあ、なんで3分ならOKで30分はNGなのか、1分ならOKでも3分はNGじゃないのか、等言い出すときりがないので、どこかで線を引いて決めてしまうしかないのはそうなんですが。
ひびき
会議室デビュー日: 2004/11/09
投稿数: 18
投稿日時: 2005-03-08 17:51
(株)ぽちさん、お返事ありがとうございます。

Singletonについては簡単に調べてみたんですが、なんだか難しそうですね。。。
ServletContextもいいなぁと思ったのですが、永井和彦さんのお返事で、
actionのtargetを明示することで、今回内容は実現できそうですので、
今回はこの方法で行いたいと思います。

ありがとうございました。



永井和彦さん、お返事ありがとうございます。

永井さんのご説明を読む限り、今回はこれだけで出来そうです。
なので、この方法で実現したいと思います。

>セキュリティについて
私も30分は長いと思います。
最初のこちらからの提案としては3分でタイムアウトとすることになっていたのですが、
短すぎて使いづらい指摘があり、最低でも30分と言われてしまったので。。。
セキュリティの話は本当に難しいですね。。。
1

スキルアップ/キャリアアップ(JOB@IT)