How to see if a user is online in a website with php and mysql driven databases? How to see if a user is online in a website with php and mysql driven databases? database database

How to see if a user is online in a website with php and mysql driven databases?


You don't need the online/offline flag, you just need to save the last activitity time. When displaying the user status, if last activity time is less than now+15 minutes then user is online, offline otherwise.


Because of the nature of the web, you can't know when a user disconnects, yanks the cable or shuts down his computer without politely telling you.

You could have a script (AJAX) check every X minutes to see if the browser still responds, and if not, toggle offline - but that would consume extra resources. This is how for example an IRCd works: they PING you, you PONG back. If you don't pong back, you timeout and get disconnected from the server.

HTTP is stateless, there is no other built-in solution. Maybe HTML5 and sockets, but that would be the same principle as just plain AJAX.


CREATE TABLE `user_online` (`session` char(100) NOT NULL default '',`time` int(11) NOT NULL default '0') TYPE=MyISAM;<?phpsession_start();$session=session_id();$time=time();$time_check=$time-600; //SET TIME 10 Minute$host="localhost"; // Host name$username=""; // Mysql username$password=""; // Mysql password$db_name="test"; // Database name$tbl_name="user_online"; // Table name// Connect to server and select databsemysql_connect("$host", "$username", "$password")or die("cannot connect to server");mysql_select_db("$db_name")or die("cannot select DB");$sql="SELECT * FROM $tbl_name WHERE session='$session'";$result=mysql_query($sql);$count=mysql_num_rows($result);if($count=="0"){$sql1="INSERT INTO $tbl_name(session, time)VALUES('$session', '$time')";$result1=mysql_query($sql1);}else {"$sql2=UPDATE $tbl_name SET time='$time' WHERE session = '$session'";$result2=mysql_query($sql2);}$sql3="SELECT * FROM $tbl_name";$result3=mysql_query($sql3);$count_user_online=mysql_num_rows($result3);echo "User online : $count_user_online ";// if over 10 minute, delete session$sql4="DELETE FROM $tbl_name WHERE time<$time_check";$result4=mysql_query($sql4);// Open multiple browser page for result// Close connectionmysql_close();?>