ユーザーが一日中ブラウザでページを実行したままにするアプリケーションがあります。このページには、30秒ごとにデータを更新するintervalrenderedがあります。
ただし、ユーザーがしばらくページを操作しなかった場合でも、ページは期限切れになります。ブラウザが開いていて、スケジュールされたリクエストを行っている限り、自動拡張したいのですが。
これらのページのいずれかでスケジュールされたレンダラーが起動されるたびにセッションを自動的に延長する方法はありますか?
ICEfaces には、セッションを維持するための内部メカニズムがあります (このメカニズムは「ハートビート」と呼ばれることもあります)。関連するドキュメントを見て、記載されているパラメーター (特にheartbeatIntervalとheartbeatTimeout ) をweb.xmlで構成することができます。
私があなたの本当の目的を理解していない場合は、すべてのユーザーセッションクライアント側を自動的に延長する一種のタイマーが必要です。その結果、サーバー側のデフォルトのページセッションの有効期限(通常は30分、詳細については、スクリプトを理解したため)をオーバーライドします。ユーザーがページでアクティブな場合、30秒ごとに「レンダリング」します)。
そうだとすれば、JSFの前は、常にアンダーグラウンドJavascriptを介して非アクティブなユーザーセッションを拡張していたので、あなたの場合にも使用します。実用的には、Javascriptで次のコマンドから簡単なページリスナーを作成できます。
window.setInterval( expression , msecIntervalTiming );
「式」は、ユーザーがアクセスした現在のページをリロードせずにセッションを存続させるために必要なダミーJSFを呼び出す呼び出し関数にすることができます。以前は、標準フレームまたはiframeを使用してhttp呼び出しを行いましたが、現在はXHR/を使用しています。 Ajaxもよりシンプルです。
Javascriptの例:
var timerID = null;
function simplePageListener() { // invoked by some user event denoting his absence status
// here goes all events and logic you need and know for firing the poller...
if (timerID == null) // avoid duplicates
timerID = window.setInterval( "window.startPoller()", msecIntervalTiming );
}
//...
function pollerStart() {
// make iframe or ajax/xhr requests
}
function pollerStop() {
// make action like page reloading or other needings
}
//...
function triggeredCleanTimer(timer) { // invoked by some user event denoting his active status
clearTimeout(timer); // it can be also the global variable "timerID"
timerID = null;
}
実質的には、リスナーのステータスを追跡するためのグローバル参照として「timerID」を使用するため、「自動拡張」をアクティブにする必要がある場合は、setIntervalを割り当てます。代わりに、ユーザーがページに戻ったときに(知っているイベントによってトリガーされます)、タイムアウトをクリアしてリスナーのポーリングを停止します。上記の例は、ユーザーが戻ってきたときに手動でページをリロードする必要があることを明らかに示しています。
ただし、特定のケースでは、Icefacesフレームワークによって自動的に生成されるjavascriptに干渉することは避けます。ipothesysの場合、非表示の入力要素で定期的に一部のユーザーイベントをシミュレートできたとしても(スタイルは「可視性:非表示」に設定され、「表示:なし」では絶対に設定されません)、これによりIcefacesイベントは停止せず、それ自体が機能します継続的に
<input type = "button" name = "invisivleButton" value = "..." style = "visibility:hidden、z-index:0;"などの要素 />定期的に呼び出すことができるクリックイベントを呼び出す
document.forms["YourDummyForm"]["invisivleButton"].click();
使用法については、DevedgeOnlineの古い素晴らしいJSドキュメントを参照してください:-)
http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/window.html#1203669
Iceface の Ajax ブリッジには、たとえばIce.onSessionExpired()
使用できるコールバック API があります。
<body id="document:body">
<script type="text/javascript">
Ice.onSessionExpired('document:body', function() {
<!-- Do something here -->
});
</script>
詳細については、 http://www.icefaces.org/docs/v1_8_0/htmlguide/devguide/references4.html#1094786を参照してください。