3

ユーザーにログインしてログアウトするスクリプトがあります。それは完璧に動作します。これで、登録およびアクティブ化されたユーザーの数と、オンラインになっているユーザーの数をカウントするウィジェットが好きになりました。これを行うには、ユーザーデータベースにonline = 1または0というフィールドを設定します。ユーザーがログインすると、online = 1、logout online = 0になります。このフィールドが更新されるだけであることを考慮していませんが、ユーザーが何かをしているからです。セッションがタイムアウトすることを考慮していません。

セッションタイムアウト=trueの場合、username =$usernameおよびuser_id=$user_idであるonline=0に設定されたユーザーを更新するような関数を作成するにはどうすればよいですか。

4

4 に答える 4

3

ブール値を使用して誰かがログインしているかどうかを確認する代わりに、TIMESTAMPを使用してみてください。次に、誰かが不在であった時間に基づいて、より正確なロジックを実行できます。誰かがあなたのウェブサイトにページを最後にロードしたのが30分前だったとしたら、彼らはオンラインだと思いますか?あなたも彼らが彼らのキーボードにいると思いますか?

于 2013-03-04T19:28:01.480 に答える
3

データベーステーブルに、のような別の列を追加しますlast_seen。オンラインでユーザーを表示するたびにこれを更新してください。一定期間非アクティブになると、非アクティブとしてマークされます。online実際、フィールドをこれに置き換えることをお勧めします。

例えば、

ALTER TABLE users CHANGE COLUMN `online` `online` DATETIME; -- SAMPLE SQL query only

オンラインのユーザー数を確認するには:

SELECT * FROM users WHERE online>(NOW()-INTERVAL 1 HOUR); -- SELECTS all users online in the past hour.

ユーザーがログアウトする場合は、を設定するだけですonline = NOW()-INTERVAL 1 HOUR。または、前onlineのフィールドを保持して、ユーザーがアイドル状態であるかどうかを確認することもできます(私の提案を使用)またはonline=0

于 2013-03-04T19:29:07.613 に答える
0

セッションは、必要な場合にのみタイムアウトします。この質問は実際には「 PHPセッションを期限切れにする方法」と重複しています。'

コードはphpページが提供されたときにのみ実行されるため、セッション変数を使用してユーザーが最後にアクティブになった時間を追跡し、そのユーザーにページが最後に提供された時間を追跡する必要があります。次に、phpページをユーザーに提供するときはいつでも、タイムアウト期間が経過したかどうかを確認し、経過した場合はユーザーをログアウトします。例については、リンクを参照してください。

于 2013-03-04T19:28:18.917 に答える
0

最後のユーザーアクティビティのタイムスタンプを格納するlastOnlineフィールドを追加します。「n」秒ごとにタイムスタンプを更新するajax関数をページに配置します。

ユーザーがオンラインかどうかを確認するには、オンラインフィールドとタイムスタンプの両方を確認します。タイムスタンプが「n」秒以上前に更新された場合-オンラインフィールドが1に等しい場合でも、ユーザーはオフラインです。

于 2013-03-04T19:29:20.317 に答える