人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP及びJavaScriptでの質問です。

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

●質問者: quocard
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● y-kawaz
●50ポイント

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


2 ● a-kuma3
●50ポイント

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 のイベントで警告を出しますが、想定内(ログアウトの必要がない)のページ遷移のときには、警告を出すためのフラグを落とす、という感じです。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ