2016-04-25 20 views
-4

私はウェブサイト制作にかなり新しいですが、私はウェブサイトを作っており、誰がオンラインで、誰がオフラインであるかを希望します。最善の方法で、それらをログアウトしてください。現時点では、誰かがログインすると、"online"の列が"1"に更新されます。誰かがログアウトすると、"online""0"に更新されます。一定期間後に自動的にユーザーをログアウトするにはどうすればよいですか?

私はデータベースにログインした時とログアウトした時を知らせるタイムスタンプも持っています。 (と私が言ったように、私は少しこれのすべてに新しい)、誰かが言ったように、なぜ私は"online""login_time"が必要ですか?私はそれがより簡単かもしれないと思った。これは私が持っているコードです...

Login.php:

session_start(); 
    session_regenerate_id (true); 
    $_SESSION['user_id']= $id; 
    $_SESSION['user_name'] = $user_name; 
    $_SESSION['login_time'] = time(); 
    mysql_query("update users set online='0' where login_time >= 60"); 
    mysql_query("update users set online='1' where id='$id'") or die(mysql_error()); 
       } 
     header("Location: home.php"); 
    } 

はこれを行うには良い方法はありますでしょうか? 5分間休止した後に誰かをオフラインで更新する簡単な方法が含まれていますか?

+2

'WHERE login_time => 60");構文は '> ='で、それ以外の方法ではありません。あなたの質問は不明確です。実際の構文などを投稿する必要があります。 –

+0

ありがとうございました。これは、他の誰かがログインしたときに他の非アクティブなユーザーをログアウトするのに完璧に機能しました。しかし、ログインする他の誰かを使用せずにこれを行う簡単な方法があります。状態? –

+0

ページを読み込んでいない、またはクリックしているもののように、ここで考慮すべき点はたくさんありますか?私はJSまたはjQueryを提案します。これは、クッキーまたはセッションの可能性が高くなります。 – nerdlyist

答えて

0

何か問題が発生した場合は、デバッグして問題を解決してください。まず、MySQLのコンソールで、あなたのコマンドを実行しよう:

mysql> UPDATE users set online='0' WHERE login_time = > 60; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '> 60' at line 1 

の正しい構文大なりである> =(下/大きいが、常に最初に来ます)。

login_time >= 60また、毎秒手動で時間を更新する必要があり、データベースの負荷が高くなります。すべてのユーザーを捕まえるには、UPDATEコマンドを1秒に1回実行する必要があります。

あなたは保存し、代わりに日時をログインに一致する(または最後のアクション)を検討してください:ユーザーがまだオンラインである

UPDATE users SET login_time=NOW() WHERE id=? 

チェックした場合:ログインで

SELECT * FROM users WHERE login_time < DATE_SUB(NOW(),INTERVAL 5 minute) 

参照してください。 DATE_SUBおよびINTERVALの詳細は、https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-addのmySQLドキュメントを参照してください。

PS:The PHP manual statesこの拡張機能はPHP 5.5.0では非推奨で、PHP 7.0.0では削除されました。代わりに、MySQLiまたはPDO_MySQL拡張を使用する必要があります。mysql_query

+0

ありがとうございます。これは私が今持っているものです。これは効果がありますか? \t \t $ _SESSION ['user_id'] = $ id; \t \t $ _SESSION ['user_name'] = $ user_name; \t \t $ _SESSION ['login_time'] = time(); \t \t mysql_query(「SELECT * FROM users login_time

+0

これはおそらくエラーを投げずに実行されますが、ログインしたすべてのユーザーを選択するクエリは意味をなさない。作業時間ベースでは、ユーザー表に「オンライン」列は必要ありません。 – Sebastian

+0

私はこれについて全く新しいことを理解しようとしています。私は基本的に誰かがオンラインかオフラインかを知りたいのですが、メンバーページではデータベースの「オンライン」列からオンラインまたはオフラインのいずれかを表示します。私はデータベースを自動更新する方法を知っておく必要があります。一定期間アクティブでないときは、データベースを「0」に設定し、アクティブではないことを表示します。 –

関連する問題