3

ログインシステムがあります。ログイン セッション ストアと Cookie を使用して (「私を覚えている」場合)、ログインします。home.php のログイン システム内にいる場合 (セッション/Cookie が登録されている場合のみ入力できます)、「ユーザー」テーブルのステータス フィールドを、サインアウト時にオンラインとオフラインに更新する必要があります。

ログインしてログアウトしたときにステータスを更新する方法は知っていますが、ここに問題があります。つまり、ステータスがオンラインに設定されていてページを離れても、オンラインのままになるということです..ロジック..この状況で私は何をしますか? ページを離れるときにログオフするようなちょっと醜いポップアップを表示したくありません。

それとも、セッションが切れたときに、ステータスをオフラインに設定しますか? 繰り返しますが、どうすればいいですか?

これに対する解決策のアイデアと例は良いでしょう。

Facebook などのサイトでは、チャットでページを離れるとステータスが Idle に変更され、ページを離れてしばらくオフラインになると、どうすればよいかわかりません。

4

7 に答える 7

4

Facebook は、チャット サーバーへのオープンな接続を維持する Javascript がページに含まれているという点で、少し厄介です。接続が失われると、ページ (またはインターネット接続) が閉じられ、オフラインとマークされたことを意味します。

通常、最後のアクティビティ/ページの読み込み後しばらくしてからユーザーをオフラインにするタイムアウトのみが使用されます。このタイムアウトの妥当な値は、たとえば、セッション Cookie の有効期限が切れるまでの時間です。

于 2010-08-08T19:04:17.130 に答える
1

簡単な解決策は、ユーザーが最後にアクセスした時刻を保存し、ユーザーが実際にログアウトした場合、または過去にその時間が長すぎる場合に、そのユーザーをオフラインと見なすことです。

より良い解決策 (Facebook と同様) には、半永続的な接続を使用し、それらを使用してより詳細にプレゼンスを検出する必要があります。

于 2010-08-08T19:06:51.387 に答える
0

AJAX プッシュと同様のことを行う必要があると思います。@Wim も同様のアプローチを提案しています。

于 2010-08-08T19:19:08.530 に答える
0

私は最近趣味としてphpでサイトを書いていますが、標準から変更して、これに対する私の見解は、セッションがファイルに保存されている場所でした:

  • 別のテーブルを用意して、ユーザー ID、last_update 時間、セッション ID をリストします
  • 呼び出されたセッションに変数を保存しますlast_active
  • 各ページ呼び出しで、最後のアクティブ時間が 30 秒未満 (または任意) であるかどうかを確認し、それより長い場合はステップ 1 でテーブルを更新し、そうでない場合は続行します。これにより、すべてのページで呼び出しを行う必要がなくなり、1 分ほどで正確になります。

データベース内のセッション ID は不要です。誰がどのセッション ID をアクティブにしているかを確認できるのはうれしいことです。誰かをログアウトさせたい場合は、この ID に基づいて手動でセッション ファイルを削除するハック関数を少し書きました。 ... 本当の理由はありません。ちょっとした楽しみです。

もちろん、セッションをデータベースに保存している場合は、ページごとにデータベーストリップを行っているため、更新はそれほど問題にならないため、さらに簡単です。

ページが開いているがアクティブに更新されていない場合でもデータベースを更新し続けるために ajax を追加することもできます。

于 2010-08-08T19:19:36.660 に答える
0

たとえば、ユーザーのテーブルに last_visit というフィールドを作成し、ユーザーが任意のページにアクセスしたときに sysdate、now() などで更新することができます...

オンライン ユーザーを提供するクエリでは、フィールド last_visit が 10 分以下のユーザーでフィルター処理します。

お気に入り:

where last_visit < today-(10 minutes)
于 2010-08-08T19:06:14.327 に答える
0

ユーザーがログアウトせずに (実際のログアウト ボタンを押して) サイトを離れた場合、どうすればよいですか?

まあ、あなたはそれを検出することはできません。あなたができる最善のことは、「最後にアクティブだった」統計または「過去数分間にアクティブだったユーザー」です。この場合、ユーザーがページ要求を行うたびに、データベース フィールドを更新する必要があります。

于 2010-08-08T19:04:50.080 に答える
0

ページ読み込み時にタイムスタンプを保存してから、経過時間に基づいてオンライン/オフライン ステータスを取得できます。

于 2010-08-08T19:05:31.350 に答える