- PR -

ASP.NETにおけるTimerイベントについて

投稿者投稿内容
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-09-09 14:08
>そうするとAが保持しているHASH値とDB上のHASH値が異なる為
>Aに対し何らかのエラー処理を行います。
>この為に、Aのセッションクッキーを定期的に取得し、その値
>をDB上の値と比較する処理を行いたいのです。

Webの仕組みとして、クライアントからのリクエストも無く、サーバー側からクライアントへクッキー情報を取りに行くことは出来ません。もし仮に出来たとしても、AもBもそして接続してきたクライアント全てを定期的にチェックしなければいけないことになってしまいますよね。

自分としてはBが同一IDでログオンした場合は、次回Aからのリクエストがあったタイミングでエラーとしてはじくような仕組みにしたほうがいいと思います。
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-09-09 14:18
引用:

目的は二重ログインの防止処理を作成することです。
Aがログインすると、DBにAがアクセスした時間をもとに
作成したHASH値を書き込み、その値をセッションクッキーで
保持します。
同じIDを持ったBがログインするとDB上のHASH値が変わります。

そうするとAが保持しているHASH値とDB上のHASH値が異なる為
Aに対し何らかのエラー処理を行います。

この為に、Aのセッションクッキーを定期的に取得し、その値
をDB上の値と比較する処理を行いたいのです。


何となくやりたいことは分かるのですが、この場合Aさんのクッキーやセッション状態値を確認するには、Aさんが表示しているページが送信するなどしてくれなければ不可能だと思います。

Webアプリケーションではクライアントからのアクションがなければ、プログラム自体が動かないので何もできません。(ActiveXなどを使えば違うと思いますが、たぶん今回の件はそういうことではないと思いますので)

Webアプリケーションでの2重ログイン防止はどこかで妥協が必要になると思いますので、「何のために2重ログインを防止するのか?」という点から再検討する必要があるかもしれません。
ターキッシュ
大ベテラン
会議室デビュー日: 2003/01/15
投稿数: 126
投稿日時: 2004-09-09 15:21
皆様 ご返答ありがとうございます。

引用:

Webアプリケーションでの2重ログイン防止はどこかで妥協が必要になると思いますので、「何のために2重ログインを防止するのか?」という点から再検討する必要があるかもしれません。



今回の仕様は実績のあるものが採用されたため、今からの変更は
無理な状況ですが、現在は全てjavascriptで行われているものを
ASP.NETで作り変えようとしたのが、事の発端です。

仕様自体は、正規のユーザAが最初にログインした状態でユーザB
がログインしてきた場合、アラートが上がりAがログイン画面に
差し戻されるという仕様です。
そこで、正規のユーザAはおかしいと思うので、コールセンターに
電話してPWを変更するという仕様になっています。
何らかの理由で漏えいしてしまった場合の対応としては悪くない
仕様と思っております。

色々自分の方でも色々試しましたが、ログイン後のページに、
<asp:TextBox id="ID_TextBox" Runat="server" Visible="False"></asp:TextBox>
を埋め込んでおき、この情報をタイマーで回す関数の中で使用し、
DBの情報と比較することにしようと思いましたが、これをやった
場合TextBoxの情報は間違い無くユーザ毎の情報が入りますが、
タイマーの関数もマルチスレッドで動くはず・・・・・かな?

これって問題ありますかね?
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-09-09 15:43
引用:

今回の仕様は実績のあるものが採用されたため、今からの変更は
無理な状況ですが、現在は全てjavascriptで行われているものを
ASP.NETで作り変えようとしたのが、事の発端です。


なるほど、基になる既存のWebアプリケーションがあるということですね。

そういうことでしたら、ASP.NETも所詮Webアプリケーションなので、残念ですがクライアント側のjavascriptでしかできないことはjavascriptで実装するしかありません。

こちらの記事が参考になるかもしれませんので、一度読んでみてください。
Visual Studio .NETは魔法の杖か?
ターキッシュ
大ベテラン
会議室デビュー日: 2003/01/15
投稿数: 126
投稿日時: 2004-09-09 18:00
Ten.様 ご返答ありがとうございます。

引用:

Ten.さんの書き込み (2004-09-09 15:43) より:
こちらの記事が参考になるかもしれませんので、一度読んでみてください。
Visual Studio .NETは魔法の杖か?



非常に勉強になりました。
クライアントサイドとサーバーサイドを一緒にして何度か痛い目に
遭った事があったにも関わらず、まだまだ未熟なようです。

一番強力なASP.NETのWebアプリケーションは、ユーザのPCに.NET FRAMEWORK
がインストールしてある状況で、そのコンポーネントを利用する
方法だと思いますが、ユーザが許さないんですよねぇ・・・・

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-09 22:52
 試してないのでアレですが、フレームを分けて、大きさ0のフレームを作り、そのフレームにてポストバックをさせると、ユーザ入力の方はポストバックによる再描画の影響を受けないですむのでは?

 で、ちょっと気になったのですが、
引用:

仕様自体は、正規のユーザAが最初にログインした状態でユーザB がログインしてきた場合、アラートが上がりAがログイン画面に差し戻されるという仕様です。
そこで、正規のユーザAはおかしいと思うので、コールセンターに電話してPWを変更するという仕様になっています。
何らかの理由で漏えいしてしまった場合の対応としては悪くない仕様と思っております。


悪くないですか?ユーザAとユーザBの、どちらが不正ユーザですか?ユーザAが強制退去させられた後、ユーザBは操作を続けられるのでしょうか?ユーザAがいたことをユーザBには知らされないのでしょうか?ユーザAが不正ユーザだった場合、不正ユーザがパスワードを変えるよう連絡することはないのでしょうか?また、コールセンターは、どうやって・・・まぁ、それはいいか。
猫山みやお
大ベテラン
会議室デビュー日: 2004/09/09
投稿数: 119
投稿日時: 2004-09-09 23:56
ユーザーAが不正ユーザーだと変なことになりそうですね
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-10 06:18
引用:

Jittaの書き込み (2004-09-09 22:52) より:
 試してないのでアレですが、フレームを分けて、大きさ0のフレームを作り、そのフレームにてポストバックをさせると、ユーザ入力の方はポストバックによる再描画の影響を受けないですむのでは?


 そういえばポストバックのさせ方も質問されていましたね。こんな感じかな?


 window.setTimeout('postbackForCheck()', ミリ秒);
 function postbackForCheck() {
  window.document.フォームID.submit();
 }

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