ログインを厳密に行いたく以下のことが出来るものを構築しました。
・同一アカウントでのログインは一人のみ
・ログイン後は他の人はログインが行えない
・何らかの原因でブラウザが落ちたりした場合でも一定時間が経過しないとログインが行えない
というものです。
正常に「ログアウト」以外の方法で終了した場合は、規定の時間が経過するまでログインをロックするというものです。
ログイン自体をロックすることは出来ているのですが、「ログアウト」以外での方法で終了する人に対してJavaScriptで警告を出したいと思い、ページを遷移した際にイベントが発生するonbeforeunloadを使えばよいと考えました。ウェブ上にあったサンプルです。
window.onbeforeunload = function() {
alert("Before Unload");
return false;
}
しかしウェブサイト内のリンクやsubmitでもイベントが発生してしまいます。
ページ移動の際にはイベントを発生させたいのですが、リンクやsubmitではイベントが発生しないようにすることは出来ますか?
可能であればどういった手法があるのかご教示いただけないでしょうか。
ブラウザを閉じる動作を完璧に把握するのは無理(電源やネットワーク断とかもある)なので発想を変えた方が良いかもしれません。
例えば、ログイン中は常に適当な短い間隔(60秒とか)でサーバへポーリング(XHRリクエストを投げるなど)を実行する仕掛けを全ページに仕込んでおいて、サーバ側では一定時間内のポーリングリクエストが無いユーザは「ログアウト以外の方法で終了した」と判断してロックフラグを立てるなど。
http://q.hatena.ne.jp/answer
>リンクやsubmitではイベントが発生しないようにする
Ajaxで送信したりページ遷移したりすればいいのでは?
ポーリングを実装できる知識があれば多分こっちのが簡単