1

自分のサイトにログインしている人を確認できるページを作成したい。ログイン後のすべてのユーザーに対して、セッションを作成し、クエリを送信してmysqlの「Logged」行を「いいえ」から「はい」に変更します。次に、このページでPHPを使用して、mysqlでYesが設定されているすべての人を表示します。これで機能します。しかし、誰かがログアウトをクリックせずにブラウザを閉じると発生する問題があります-クエリは実行されず、mysqlのYes値は残ります...このようなページを作成するにはどうすればよいですか?

4

3 に答える 3

2

ログインまたはログアウトのブール値を設定する代わりに、セッションの有効期限が切れる妥当な時間(たとえば、1か月)を決定し、その時間をタイムスタンプに追加して、データベースに保存しますsession_expires。次に、ログインチェックを行うたびに、ユーザーのセッションが期限切れになっているかどうかを確認できます。

さらに、セッションを手動で期限切れにするには(たとえば、ユーザーがログアウトした場合)、session_expiresフィールドを過去のタイムスタンプに設定するだけです。

編集

週末はコンピューターにアクセスできなかったため、回答を適切に更新できませんでした。

アクティブなユーザーを表示する必要がある場合、私が過去に行ったことの1つはlast_seen、ユーザーがサイトで何かを行うたびに更新されるタイムスタンプフィールドを使用することです。次に、「ログインしているユーザー」ページで、「過去15分間に最後に表示された」などの最近の情報をクエリします。

于 2012-11-17T19:10:20.393 に答える
1

それについては何もできませんが、タイムアウトを定義します。つまり、ログイン後の最初の呼び出しで顧客行を「はい」に設定すると、その顧客行の日付列を更新するために、すべてのリクエストで(またはリソースを節約するために毎分)トリガーする必要があります。更新がもう入らない場合は、その顧客を「もうログインしていない」と定義し、列を「いいえ」に更新します。

于 2012-11-17T19:07:35.403 に答える
1

ユーザーがログインしたままでいるという事実は、PHP設定php.iniで構成されている可能性のあるPHPセッションタイムアウトが原因です。

セッションシャットダウンハンドラー(セッションが無効になると呼び出される)を設定する方法については、 http://php.net/manual/en/function.session-set-save-handler.phpを参照してください。シャットダウンハンドラーが呼び出されたら、データベースで現在のセッションの「ログに記録された」をfalseに設定します。それでも、最大24分かかる場合があります(セッションタイムアウトのphp.iniのデフォルト値-session.gc_maxlifetime = 1440分)。

この値(session.gc_maxlifetime)を2〜3分に減らし、各ページでajax関数を使用して、セッションを存続させます。これにより、サーバーの負荷が確実に増加しますが、現在アクティブなユーザーをより適切に表現できるようになります。php.iniコード内のusigから、またはusigによって値を減らすことができini_set(‘session.gc_maxlifetime’,30);ます。

よろしく

于 2012-11-17T19:22:09.953 に答える