PHP及びJavaScriptでの質問です。


ログインを厳密に行いたく以下のことが出来るものを構築しました。
・同一アカウントでのログインは一人のみ
・ログイン後は他の人はログインが行えない
・何らかの原因でブラウザが落ちたりした場合でも一定時間が経過しないとログインが行えない
というものです。
正常に「ログアウト」以外の方法で終了した場合は、規定の時間が経過するまでログインをロックするというものです。
ログイン自体をロックすることは出来ているのですが、「ログアウト」以外での方法で終了する人に対してJavaScriptで警告を出したいと思い、ページを遷移した際にイベントが発生するonbeforeunloadを使えばよいと考えました。ウェブ上にあったサンプルです。
window.onbeforeunload = function() {
alert("Before Unload");
return false;
}
しかしウェブサイト内のリンクやsubmitでもイベントが発生してしまいます。
ページ移動の際にはイベントを発生させたいのですが、リンクやsubmitではイベントが発生しないようにすることは出来ますか?
可能であればどういった手法があるのかご教示いただけないでしょうか。

回答の条件
  • URL必須
  • 1人5回まで
  • 13歳以上
  • 登録:2012/08/29 00:33:10
  • 終了:2012/09/05 00:35:03

回答(2件)

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262012/08/29 18:36:38

ポイント50pt

ブラウザを閉じる動作を完璧に把握するのは無理(電源やネットワーク断とかもある)なので発想を変えた方が良いかもしれません。
例えば、ログイン中は常に適当な短い間隔(60秒とか)でサーバへポーリング(XHRリクエストを投げるなど)を実行する仕掛けを全ページに仕込んでおいて、サーバ側では一定時間内のポーリングリクエストが無いユーザは「ログアウト以外の方法で終了した」と判断してロックフラグを立てるなど。
http://q.hatena.ne.jp/answer

id:a-kuma3 No.2

a-kuma3回答回数4584ベストアンサー獲得回数19242012/08/29 23:28:54

ポイント50pt

id:quocard さんが書かれている

ページ移動の際にはイベントを発生させたいのですが、リンクやsubmitではイベントが発生しないようにすることは出来ますか?

の辺りが、いまいち分からなかったのですが、あるシステム内でページ遷移しているときには onbeforeunload での警告を出したくなくて、別のサイトに遷移したときには警告を出したい、というふうに解釈しました。

万能な解決策ではないのですが、自システム内での遷移の場合には、フラグを立てておいて、警告を抑止するしかないと思います。
アンカータグと、form の submit だけですが、以下のような方法が考えられます(jQuery 使ってます)。

<script>
$(function() {
    __MAYBE_GO_AWAY__ = true
    $("A").click(function(e) {
            var re = new RegExp("^http://" + window.location.hostname);
            if (re.exec(this.href)) {
                __MAYBE_GO_AWAY__ = false;
            }
        });
    $("FORM").submit(function(e) {
            if (this.action == "") {
                return;
            }
            var re = new RegExp("^http://" + window.location.hostname);
            if (re.exec(this.action)) {
                __MAYBE_GO_AWAY__ = false;
            }
        });
    window.onbeforeunload = function() {
            if (__MAYBE_GO_AWAY__) {
                alert("You need to LOGOUT !");
                return false;
            }
        };
});
</script>

基本的には、onbeforeunload のイベントで警告を出しますが、想定内(ログアウトの必要がない)のページ遷移のときには、警告を出すためのフラグを落とす、という感じです。

  • id:standard_one
    終了していたのでコメントで
    >リンクやsubmitではイベントが発生しないようにする
    Ajaxで送信したりページ遷移したりすればいいのでは?
    ポーリングを実装できる知識があれば多分こっちのが簡単

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません