2012-05-11 7 views
1

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

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

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

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

このページでclass SessionDBを検索したり、hereに行ったりすると、すでにカスタムクラスにこのバージョンが実装されているようです。

+0

ありがとう、私はこれを読んでいるでしょう。 – user1199434

-1

あなたはこれを試みることができる:

foreach ($_SESSION as $sessionKey => $sessionValue) 
{ 
    if($sessionKey == 'username') && ($sessionValue == 'User 1') 
    { 
    //do something 
    } 
} 
+0

ええと、これは悲しいことに、うまくいきませんでした。とにかく感謝します:) – user1199434

+0

OPが持っていた問題は、 "何かをする"部分を書くことでした。もう一度質問を読んでください、ジョン。そのコードでforeach文を使用することさえありません。「username」キーが設定されているかどうかを確認し、値を確認するだけで十分でしょう。 –

+0

申し訳ありません - 私は質問のこの部分に立ち往生しています:「例えば、セッション変数の配列をどのように取得するのですか? –

0

はあなたがテーブルのユーザーを持ち、その中にあなたが(オンライン/オフライン)の列と呼ばれる状態を持つ例えば、単純な更新クエリ

を使用することができます

その後、

<?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'") 
} 

あなたlogin.phpの使用上のログアウト時には、シムを行いますilarスクリプトはオンライン値をオフラインに変更するだけです

関連する問題