最終ログイン日時の保存とは別に、各ユーザーの一意のセッション ID を DB に保存する必要がありますか (最終セッション ID をユーザー テーブルに保存し、ユーザーが有効なセッションを持っているかどうかを確認します)。
いいえ、そうではありません。データベースに接続している間、ユーザーは複数のセッションを持つことができるからです。
ユーザーは簡単にプライベート ブラウザ インスタンスに入り、サイトにアクセスできます。ヴィオラ、新しいセッション。
セッション ID が一致するかどうかを確認するためにセキュリティ上の利点が実際に得られるわけではありません。その上、セッション終了イベントにフックして、データベースから最後のセッション ID を消去する必要があります。ユーザーのセッションがタイムアウトし、後で戻ってきた場合、セッション ID は異なり、有効になります。
ユーザーがログアウトするかウィンドウを閉じるまで (ウィンドウを開いたままにしても)、ユーザー セッションを維持することは良い方法ですか?
セッションがタイムアウトする前にサーバーに ping を実行するページに AJAX コールバックを設定することで、セッションを存続させることができます。
とはいえ、これは絶対にダメだと思います。それはセキュリティの問題です。誰かがワークステーションを開いたままにしてページを開いた場合、他の誰かがそのユーザーの下でサイトにアクセスできます。
ユーザーがブラウザを閉じるのを忘れてワークステーションを開いたままにしても、少なくともセッションはタイムアウトになり、ユーザーはサイトにアクセスできなくなります。
もちろん、シナリオが Internet Explorer を使用していないことを前提としており、ログインしているユーザーの資格情報がサイトに自動的に渡されます。ただし、他のブラウザー (Safari、Firefox、Chrome) が使用されている場合は、Windows 資格情報が引き続き使用されますが、ユーザー名とパスワードのダイアログが表示されるため、そこではわずかなセキュリティが確保されます。
通常は、セッション タイムアウトを維持します。よほどの理由がない限り、回避しないでください。
通常、セッションレベルの詳細は、ユーザーがユーザーログインとパスワードを介してシステムにアクセスするデータベースに保存されますが、私のアプリケーションにはログインページがありません。
トレース目的のみでない限り、データベース内のセッションをアクティブにリンクするために何もすべきではありません。ユーザーがアプリケーションにログインするとき、あなたはユーザーを扱っているので、ユーザーが持っているセッション ID に基づいて選択する必要はありません (この番号はランダムであり、このタスクでは意味がありません)。ユーザー。