• ベストアンサー

特定ページのアクセスを一人だけに制限したい。

ASPであるシステムを作っています。 ユーザIDとパスワードを入力してログインしますが、もちろん、同時に複数ユーザがログインできます。 しかし、ある特定のページのみ、一人しか入室できないようにしたいのです。 page1.aspにAさんがアクセスしている間、他の人は誰もpage1.aspにアクセスできないようにするような方法はないでしょうか? Aさんがそのページから別のページに移動すれば、他の人もpage1.aspにアクセスできるようになります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

最近はJavaScriptで制御、ってのはやらないですね。 ユーザさんによって環境が違ったりしますし。 (統一された環境ならいいんですが。。。) サーバ側の処理が望ましいです。 タイムアウトの時間を決めれば、Application変数で実現可能だと思うんですけど、いかがでしょう?(未確認) ご存知かと思いますが、Application変数とはSession変数と違って、みんなで共有する変数です。(ちょっと違うかも) Session変数はユーザごとに別の値を持ちますが、Application変数は全ユーザ共通の値を持ちます。 サーバ再起動まで、変数の中身は保持されます。 1.そのページにアクセスした時に、最初にアプリケーション変数A(以下、変数A)を見ます。 2.変数Aで現在ログインしているか(on)、していないか(off)判断します。 3.誰もログインしていない場合は、変数Aに「on」を入れて入室。その時、アプリケーション変数B(以下、変数B)に、入室時間を格納します。 4.変数Aがonだけど、変数Bの入室時間を見たらタイムアウトになっていたら、入室可能とする。 正確にはもう少し制御を考えないといけないですが、こんな感じでやればそんなに難しい話ではないと思います。 よろしければこの方法でお試し下さい。

ryo_f
質問者

お礼

教えていただいた方法で実現を検討してみたのですが、諸事情により、今回は別の手段を考えることにしました。 しかし、Application変数を使う手段はまったく思いつかなかったので、こんな方法もあるのだと大変参考になりました。 アドバイスありがとうございました。

その他の回答 (3)

  • Miki3548
  • ベストアンサー率24% (22/89)
回答No.3

こんにちは。 一概に出来る・出来ないは言えないと思うのですが、 DBかなにかに アクセスフラグを作ってみてはいかがでしょうか? アクセスフラグに 自分以外のユーザIDが入っていたら page1.aspにはアクセス不可。 「×」ボタンでフォームが閉じられた時の処理は 拾えます。onUnloadイベントで 「×」「戻る」「別ページへリンク」は チェックしてみました。 上手くかんがえてアクセスフラグを更新すればいいでしょう ログイン情報をSessionに持たせれば ページを放置されてもSessio_onEndを使えば回避できるでしょう。 ログイン情報が消えたらもう一度ログインさせ ページへのアクセスフラグも更新できますね。 と言う風に やり方はいろいろあります が・・・ JavaScriptで管理するのは お奨めできないです。 JavaScript拒否になっていたらそこでNGです。 #1さんはそういう意味で 無理と言ったのではないでしょうか? ryo_fさんの作るページが 全国誰でも使えるようなページなら 無理でしょう #2さんの言うとおり イレギュラー処理が難しいでしょうね。 でも、 社内システムなら ある程度融通が利くので 出来るかもしれません。 たとえば、1ユーザで1画面のみ対応!とか JavaScript対応ブラウザにのみ対応!とか・・・ ryo_fさんの作りたいシステムによりけりです がんばってください。

ryo_f
質問者

お礼

限られたユーザしか使用しないシステムなので、やり方によっては実現できそうですが、今回はとりあえず見送ることにしました。 しかし、いろいろ手段はあるということがわかっただけでも勉強になりました。 アドバイスありがとうございました。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

可能は可能です。CGIと組み合わせ、page1.aspにログインされた直後に排他制御するだけですが、イレギュラー処理が大変でしょうね。 page1.aspに設置してある「ログアウト」ボタンを押さないでブラウザを閉じたらどうするか? page1.aspを開いたまま放置されたらどうするか? page1.aspを「更新」ボタンでリロードされたらどうするか? 因みに、銀行のWEBページでのオンラインサービスで、同じ人が同時にログイン出来ないようにしているサイトがあり、上記の問題を「タイムアウトで自動ログアウト」と言う仕掛けで解決しています。 銀行がやってる「同じ人が同時にログイン出来ない」を「他の人も同時にログイン出来ない」に変えれば(つまり「ログイン中に同じ人がログインしようとした」の判定を「ログイン中に誰かがログインしようとした」に変えれば)目的を達成出来るので、#1さんの言う「無理です」は間違いです。 具体的な方法が判らないので回答にはなっていませんが、銀行のWEBサイトが同じような事を実現しているので可能な筈です。頑張って下さい。

ryo_f
質問者

お礼

検討した結果、別の手段を考えた方が安全そうなので、今回はこの処理は見送りました。 不可能ではなさそうなので、また必要に迫られたら考えてみようと思います。 アドバイスありがとうございました。

  • 100Gold
  • ベストアンサー率27% (284/1018)
回答No.1

無理です。 というのは、Aさんがpage1.aspにアクセスしている最中にブラウザを閉じてしまった場合、それを検知する方法がないからです。 何がやりたいのかわかりませんが、別の方法を考えるべきです。

ryo_f
質問者

お礼

がんばれば実現可能ではあるようですが、いろいろ危険も伴いそうなので、今回は別の手段を考えることにしました。 アドバイスありがとうございました。

関連するQ&A