1

現在、php セッション変数を使用して、Web ページにすべてのオンライン ユーザーを表示しようとしています。これを行うには、ユーザーがログインまたはログアウトするたびに、データベースの列が「オンライン」または「オフライン」に設定されます。ただし、ユーザーがブラウザを閉じたときにデータベースが更新されないため、これは完全には機能しません。 (したがって、セッションを破棄します)。特定のセッションIDが設定されているかどうかを確認する別の方法はありますか??

現在、私は次のようにセッションを設定しています:

session_start();

$_SESSION['username']="Example Username";

セッション変数が設定されているかどうかを現在のユーザーのページから確認するには、次のようにします。

if(isset($_SESSION['username']))
{
//username is set
}

しかし、特定のユーザーがオンラインかどうかを確認する必要がある場合、たとえば、設定されているすべてのセッション変数の配列を取得するにはどうすればよいでしょうか? 例えば

//Get all $_SESSION['username'] vars

//loop through array and check for specific $_SESSION

for($i=0; ... )
{
  if( $_SESSION['username'][$i] == "User 1" )
  {
  //do something
  }
}

私がこれまでに読んだすべてのことから、ページ上のすべてのセッションの配列を取得する方法はないようです..それを行うためのより良い方法はありますか?たとえば、facebook、twitter などはどのように処理しますかこのもの?ご協力いただきありがとうございます!

4

3 に答える 3

4

1 つの解決策は、ユーザーが Web サイト リソースに最後にアクセスした時間を記録するオンライン/オフライン フラグに加えて、タイムスタンプをデータベースに保存することです。次に、15 分後またはその他の一定値後にオフラインとみなすことができます。

他の解決策は、ここでコールバックを操作することですhttp://php.net/manual/en/function.session-set-save-handler.phpここで、gc コールバックを処理し、データベースにオフライン フラグを設定できると思います.

そのページで検索するか、ここclass SessionDBに行くと、誰かがすでにカスタムクラスでこれのいくつかのバージョンを実装しているようです!

于 2012-05-11T22:54:02.283 に答える
0

簡単な更新クエリを使用できます

たとえば、users テーブルがあり、その中に status(online/offline) という列があるとします。

login.php で使用

<?php
//your user verification code
if(variable that holds your sql query){
$user_status=('UPDATE user SET status= online WHERE email="'your user email selector'")
}

次に、ログアウト時に同様のスクリプトを実行して、オンラインの値をオフラインに変更するだけです

于 2013-12-21T12:44:33.130 に答える
-1

これを試すことができます:

foreach ($_SESSION as $sessionKey => $sessionValue)
{
  if( $sessionKey == 'username' ) && ( $sessionValue == 'User 1' )
  {
  //do something
  }
}
于 2012-05-11T22:54:21.713 に答える