4

数値計算用の Web サービスがあります。登録モードがあり、ユーザーは登録して結果をメールで送信する必要があります。

ユーザーがログに記録されている期間を追跡したいと考えています。登録が成功すると、ログイン時刻がデータベースに書き込まれます。登録は永続的ではなく、単一のセッションを目的としており、ユーザーの電子メールを取得するために使用されます。

いくつかの状況が考えられます:

ユーザーは、ログアウト ボタンを使用して通常どおりログアウトします。 最も簡単な解決策。データベースに時刻とログアウトを書き込み、セッションを削除します。

ユーザーはセッションの有効期限までにログアウトします。 ログアウト時間が設定されていないすべてのデータベースエントリをチェックするスクリプトを作成し、現在の時間 - ログイン時間 > 有効期限の場合、ログアウト時間をデータベースにログイン時間 + 有効期限として書き込むことを計画しています。

ユーザーはブラウザを閉じてログアウトします。 セッションでは、get_expire_at_browser_close() が True に設定されています。しかし、サーバーがブラウザの閉鎖をどのように検出できるかわかりません。

アイデア、批評家、コメント?

4

1 に答える 1

6

Django セッション ミドルウェアでは、SESSION_EXPIRE_AT_BROWSER_CLOSE が必要な場合、これらの行でセッションの有効期限を制御します。

if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE:
    max_age = None
    expires = None

このページによると、max_age または有効期限が設定されていない Cookie はクライアント側で削除する必要があるため、サーバーは何も検出する必要はありません。

これらのいずれかを設定すると、Cookie は期限が切れるまで保持されます。それ以外の場合 (どちらも設定しない場合)、Cookie はブラウザーを閉じるまで保持されます (「セッション Cookie」)。

編集:

ユーザーがオンラインであった時間を追跡する 1 つの方法は、時々サーバーに ping を送信する JavaScript を使用することです。これは、ユーザーがブラウザーでページを開いている場合にのみ発生し、すべての ping サーバーでユーザーの最後に見たオンライン値を更新する必要があります。

ユーザーがブラウザーを閉じると、セッションは終了します。次回ユーザーがサーバーにログインすると、最後にオンラインで見た時間-最終ログイン時間として、前回の訪問時間を計算できます。

JavaScript を使用しないよりシンプルなソリューション:シンプルなカスタム ミドルウェアを使用して、ユーザーの要求ごとにオンラインで最後に表示された情報を更新できます。

于 2012-10-07T11:39:33.403 に答える