2011-07-15 9 views
2

私はmysqlデータベースに "users"テーブルを持っています。ユーザーがオンラインの場合、1つのフィールドに情報を保持します。cron - セッションが期限切れの場合にデータベースを更新する

すべてはのAPART正常に動作します:一部のユーザーがブラウザを閉じる-if

、彼のオンラインステータスがオフラインに変更されません。

私はcronでこれを行うことができると言われましたが、私はそれについて何も知らないのです。

私は彼のセッションでユーザーIDを保存し、データベースを更新するPHP関数を作成することができます。

しかし...私はどのようにcronはそれを行うにはどのように簡単

です(セッションからのIDを持つ)がPHPを実行させるには考えていますか?

答えて

0

なぜ、ユーザーのアクティビティタイムスタンプと現在の時刻を比較することができますか?

ユーザがしばらくの間アクティブでないときはいつでも、ステータスはオフラインになると仮定します。したがって、最後のアクティビティの時間をdbに格納する必要があります。ですから、あなたがwitbのユーザの状態に応答する必要があるときは、この時間を現在のものと比較し、diffeenceが余裕以上であればofflineを返します。

+0

ユーザーがログアウトボタンをクリックしてログアウトすると、現時点ではオフラインになります。 – crock

+0

ステータスを返すときに、ユーザーがログアウトしたかタイムアウトが切れているかの両方をチェックします。 –

+0

だから、基本的には、彼のタイムスタンプが彼をオフラインにするのに十分な年齢でなければ、すべてのユーザ(dbの "オンライン"ステータスを持つ)に対してチェックを実行する必要があります。誰かが何かをするたびにそれをしなくてはなりませんか? – crock

0

ほとんどのオンラインシステムでは15分のチェック期間があります。誰かが何かをするたびにタイムスタンプを設定し、オフラインになるとタイムスタンプを更新せず、現在のタイムスタンプとdbの値を比較し、15分以上経過した場合は削除します。

+0

私が正しく理解していれば、User1はログインします(期限切れの場合、タイムスタンプ+チェックは他のすべてのものに対して実行されており、そうであれば、そのステータスはdbで更新されます)。 User2はログインします...など...? – crock

1

かなりシンプルです。これはあなたのPHPファイルにあるかもしれません(update.phpと呼んでください)。

<?php 
    /*connect to mysql as per normal*/ 
    // log users off (hopefully, you're using enum here, but for an example...) 
    mysql_query('UPDATE USERS SET STATUS = \'LOGGED_OFF\' '. 
       // whose last action was more than 14400 seconds ago (4 hours) 
       'WHERE (CURRENT_TIMESTAMP() - TIMESTAMP(LAST_ACTION)) > 14400'); 
?> 

その後、オープンのcrontab:

のcrontab -e

とTASTに15分ごとに実行するには、この行を追加します(必要であれば別の番号に番号15に変更) :

*/15 * * * * /path/to/update.php

+0

それは華麗に聞こえる:)ありがとう。あなたは "オープンcrontab"ビットで私を助けることができますか?私はcronになると完全なnoobです。 crontabを開くにはどうすればいいですか? – crock

+0

'$'から 'crontab -e'と入力してください。 – cwallenpoole

+0

ありがとうcwallenpoole。それは華麗です:) – crock

関連する問題