Liftweb で AJAX と Comet を使用する場合、セッションの終了を設定する最善の方法を教えてください。
現在、Comet および Ajax 接続のシーケンシャル リクエストは、タイムアウトが 2 分を超え、セッションが閉じられていない場合、ユーザーがアクティブでない場合でもタイムアウトをリセットします。
Liftweb で AJAX と Comet を使用する場合、セッションの終了を設定する最善の方法を教えてください。
現在、Comet および Ajax 接続のシーケンシャル リクエストは、タイムアウトが 2 分を超え、セッションが閉じられていない場合、ユーザーがアクティブでない場合でもタイムアウトをリセットします。
Liftはコメット・サポートの一部としてロング・ポーリングを実装しているため、サーバーは、アクティビティーのないユーザーと、ユーザーのブラウザーが単にポーリング・リクエストを行っていることを簡単に区別できません。ページを閉じると、セッションは正常にタイムアウトします。
個人的には、ユーザーが立ち去ってページを開いたままにしておくと、タイムアウトにならないため、通常はタイムアウトしない方が良いです (特に、何か作業をしているときに便利です)。しかし、要件は人それぞれ異なります。
最も簡単な方法は、JavaScript ライブラリを使用して非アクティブな期間を検出し、サーバーにリクエストを送信してセッションを終了することだと思います。他にもあると思いますが、グーグルで見つけたのはhttp://www.paulirish.com/2009/jquery-idletimer-plugin/で、セットアップはかなり簡単です。
サーバーがリクエストを処理する限り、Lift のディスパッチを使用して、アクティブなセッションを終了する URL を作成できますBoot.scala
。
LiftRules.dispatch.append {
case Req("logout" :: Nil, _, _) =>
S.request.foreach(_.request.session.terminate)
RedirectResponse("/")
}
アクセス/logout
するとセッションが無効になり、ユーザーがリダイレクトされます。そのため、一定期間の非アクティブ時に JavaScript がその URL へのリダイレクトを発行するようにするだけで、ユーザーはログアウトされます。