Cara membuat status user online dan offline pada website komunitas yang kita buat dengan php

Assalamu alaikum wr wb ?

Jika Anda hendak membuat Applikasi berbasis Web, yang di dalam nya terdapat komunitas user, seperti misal nya situs jejaring Facebook, Twitter, Google+, dll. Mungkin Anda perlu menampilkan user mana yang sedang Online dan user mana yang sedang Offline di situs web tersebut, atau bahkan anda harus bisa menampilkan user mana yang baru saja Login, tapi tidak melakukan aktifitas apa-apa, dengan menandai nya sebagai status Tidak Ada Aktifitas (No Activity).

IKLAN:


Setiap saya search di Google, banyak tutorial yang menulis tentang hal ini, tapi kebanyakan status Online nya di set saat Login dan Logout saja, tanpa memperhatikan, bagaimana jika seorang user Login dan lalu tidak melakukan aktifitas apa-apa, dan kemudian Browser yang di pake user tersebut di tutup begitu saja tanpa melakukan Logout terlebih dahulu...?! Tentu, status user tersebut masih dalam ke adaan Online, sampai user tersebut melakukan Logout.

Hal ini memang memerlukan beberapa ketelitian, disini saya menggunakan sebuah Fungsi time(); dimana cookie user nantinya hanya akan di jadikan sebagai acuan untuk memilih user mana yang ada di dalam table database, sedangkan yang menentukan seorang user tersebut sedang Online atau Offline adalah perbandingan zona waktu sebelum nya dengan zona waktu sekarang di kurangi batas waktu yang telah kita tentukan. Lihat konsep nya di bawah ini :

Zona Waktu Sebelum nya > Zona Waktu Sekarang - Batas Waktu =  Status Online
Zona Waktu Sebelum nya < Zona Waktu Sekarang - Batas Waktu =  Status Offline

Yang mana zona waktu sebelum nya telah di simpan dalam database saat user tersebut melakukan Login, Sementara Zona Waktu terus berjalan, kemudian pada saat user lain atau user tersebut melakukan aktifitas nya kembali, maka akan di lakukan Query Mysql untuk men cocokan Time Out yaitu Zona Waktu Sekarang di kurangi Batas Waktu yang telah di tentukan lebih besar apakah lebih kecil dengan Zona Waktu yang telah di simpan sebelum nya.

Wah... Sepertinya sedikit ribet nya, untuk pemahaman nya?
Jika Anda kurang memahami dengan penjelasan di atas, saya akan coba membuat contoh coding nya, tapi setidak nya anda memahami tentang Pemrograman php dan mysql, karena saat ini saya sedang menulis tutorial mengenai hal itu.

Pertama-tama buat lah sebuah database baru berikut table dan field-field nya. Sebagai contoh, silahkan buat database sesuai di bawah ini :

Table : on_online


CREATE TABLE `on_online` (
  `o_id` int(11) NOT NULL auto_increment,
  `o_waktu` int(20) NOT NULL default '0',
  `o_cookie` varchar(100) NOT NULL,
  `o_tanggal` date NOT NULL,
  PRIMARY KEY  (`o_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=122 ;

Table : on_user


CREATE TABLE `on_user` (
  `u_id` int(11) NOT NULL auto_increment,
  `u_username` varchar(20) NOT NULL,
  `u_password` varchar(50) NOT NULL,
  `u_nama` varchar(20) NOT NULL,
  PRIMARY KEY  (`u_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

--
-- Dumping data for table `on_user`
--

INSERT INTO `on_user` VALUES (1, 'user1', '1234', 'Nama User 1');
INSERT INTO `on_user` VALUES (2, 'user2', '1234', 'Nama User 2');
INSERT INTO `on_user` VALUES (3, 'user3', '1234', 'Nama User 3');
INSERT INTO `on_user` VALUES (4, 'user4', '1234', 'Nama User 4');
INSERT INTO `on_user` VALUES (5, 'user5', '1234', 'Nama User 5');

Table on_user di atas telah saya sertakan contoh user nya, Anda tinggal mengimport saja menggunakan phpMyAdmin atau sejenis nya ke database yang baru anda buat itu. Kemudian, jika Anda telah membuat database beserta table dan field-field nya, sekarang saat nya membuat Applikasi nya, seperti biasa, pertama buatlah sebuah koneksi php ke database nya.

File : koneksi.php

 <?php
$server = "localhost";
$username = "root";
$password = "PASSWOR NYA";
$database = "NAMA DATABASE NYA";
mysql_connect($server,$username,$password) or die("Koneksi gagal");
mysql_select_db($database) or die("Database tidak bisa dibuka");
?>
Kemudian buatlah sebuah Form Login dan Logout seperti di bawah ini :

File : login.php

<?php
include "koneksi.php"; //Koneksi ke database
if(($_COOKIE['username']) AND isset($_COOKIE['password']))
{ //Jika Cookie Username dan Cookie Password ada maka di alihkan
 echo "Mohon tunggu... <script>window.location = 'index.php'</script>";
}
 else //Jika tdak ada cookie maka perlihatkan Form Login
{
if($_REQUEST['op'] == "login")
{
 $username = $_POST[username];
 $password = $_POST[password];
 $sql = mysql_query("SELECT * FROM on_user WHERE u_username = '$username' AND u_password = '$password'");
 $jum = mysql_num_rows($sql);
//Jika User terdapat pada databse maka akan di buatkan Cookie baru
 if ($jum>0){
 setcookie('username', $username, time()+3600000);
 setcookie('password', $password, time()+3600000);
 echo "Mohon tunggu... <script>window.location = 'index.php'</script>";
 } //Jika Username atau Password salah
 else{echo "Login gagal, user atau password salah!";}
}
?>
<form name="login" action="?op=login" method="post">
Username : <input type="text" name="username" /><br />
Password : <input type="password" name="password" /><br />
<input type="submit" value="Login!" />
</form>
<?php
}
exit;
?>

File : Logout.php

<?php
include "koneksi.php"; //Koneksi ke database
$cookie = $_COOKIE['username'];
mysql_query("DELETE FROM on_online WHERE o_cookie = '$cookie'"); //Hapus Cookie
setcookie('username','',time()); //Hapus Cookie Username
setcookie('password','',time()); //Hapus Cookie Password
echo "Mohon tunggu... <script>window.location = 'index.php'</script>"; //Jika Selesai Alihkan ke index.php
exit;
?>

Kemudian buatlah Source program nya, ini adalah file utama yang mengoprasikan user Online atau user Offline pada applikasi, sengaja saya buat terpisah dari file index.php, karena disini nantinya saya akan menggunakan sebuah Ajax dari JavaScript, untuk me Reload file source.php di bawah ini :

File : source.php

<?php
include "koneksi.php"; //Koneksi ke database
if(isset($_COOKIE['username']) AND isset($_COOKIE['password']))
{ //Jika Cookie Usernam dan Cookie Password ada maka
$cookie = $_COOKIE['username'];
$timein = time(); //Ini adalah Zona waktu
$batas_time = 40; //Batas waktu yg Online
$batas_time2 = 100; //Batas waktu yang Tidak ber Aktifitas
$timeout = $timein - $batas_time; //Timeout yang Online
$timeout2 = $timein - $batas_time2; //Timeout yang tidak ber aktifitas
$tanggal = date("Y-m-d"); //Tanggal
//Cocokan yang online pada table database dengan Cookie yang ada
$sql_on = mysql_query("SELECT * FROM on_online
WHERE o_cookie = '$cookie'
AND o_tanggal = '$tanggal'
LIMIT 1");
$jum_on = mysql_num_rows($sql_on);
while($data_on = mysql_fetch_array($sql_on))
{$o_id = $data_on['o_id'];}
//Jika ada maka Zona Waktu yang tersimpan sebelum nya akan di Update
if ($jum_on>0)
{
 mysql_query("UPDATE on_online
 SET o_waktu = '$timein', o_tanggal = '$tanggal'
 WHERE o_id = '$o_id'");
}
else //Jika belum ada maka akan di simpan baru
{
 $insert = mysql_query("INSERT INTO on_online
 (o_waktu, o_cookie, o_tanggal)
 VALUES('$timein','$cookie','$tanggal')");
}
//Proses penghapusan Zona waktu yang sudah kadalwarsa
mysql_query("DELETE FROM on_online
WHERE o_waktu<$timeout AND o_cookie = '$cookie'");
mysql_query("DELETE FROM on_online
WHERE o_waktu<$timeout2");
//Perlihatkan user yang sedang Online dan yg sedang tidak ber aktifitas sesuai database
$oll = mysql_query("SELECT * FROM on_online LIMIT 10");
$jum_oll = mysql_num_rows($oll);
echo "$jum_oll Aktifitas User <a href=logout.php>Logout</a><br><br>";
//Perlihatkan status sesuai hasil perbandingan dari Zona Waktu dengan gambar
while($data_oll = mysql_fetch_array($oll))
{
$cek = $data_oll['o_waktu'];
if($cek>$timeout){$gambar = "<img src=images/?file=online.png width='19' height='19'>"; $status = "(Online)";}else{$gambar = "<img src=images/?file=offline.png width='19' height='19'>"; $status = "(Diam)";}
echo "$gambar >> $data_oll[o_cookie] $status<br><br>";
}
}

else{ //Jika tidak terdapat Cookie pada Browser
 echo "Anda belum login! <a href=login.php>Login?</a>";
}
exit;
?>

Yang terakhir buatlah file index.php di bawah ini :
 File : index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>User Online</title>
<script type="text/javascript">
function online(){
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{
// code for IE6, IE5
xmlhttp =new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("online").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET","source.php");
xmlhttp.send();
setTimeout("online()", 8000);
}
</script>
</head>

<body onload="online();">
<h2>Selamat datang!</h2>
<div id="online"></div>
</body>
</html>
<?php
exit;
?>

Anda juga bisa membuat Situs Jejaring, chatink, perjodohan, dll. Seperti hal nya Facebook, Google+, dll. dengan mengacu pada methode di atas, dan silahkan kembangkan konsep di atas menjadi lebih baik lagi.

Silahkan Anda lihat hasil nya untuk contoh di atas, dengan gambar ScreenShot di bawah ini. Disini saya Login menggunakan 2 bowser dan 2 user dan Password, dengan Browser Crome dan FireFox dimana sebelum nya saya telah menggunakan user lain nya untuk Login sekitar 1 menit yang lalu, sehingga akan tampil dengan status tidak ada aktifitas (Diam).



IKLAN:


Jika Anda menginginkan untuk Source lengkap nya bisa Anda Download Disini! Silahkan tes sendiri pada Komputer Local. Semoga tutorial di atas dapat membantu Anda. dan jangan lupa untuk memberikan komentar mengenai tutor di atas, dan jangan ragu untuk bertanya. Thank's

Posting Komentar

19 Komentar

  1. mo nnya gan...kok di web browse opera g' bsa login y gan????
    kalo web browse aman2 aja....

    BalasHapus
    Balasan
    1. Thank's sdh berkunjung...
      Coba sedikit di modifikasi untuk proses penyimpanan Cookie username dan password nya, kalo bisa di perlengkap untuk Field dan Value nya, contohnya seperti ini:

      setcookie("username","$username",time()+3600000,'/lokasi','domain.com',false);

      Jika menggunakan Secure Domain, silahkan ganti untuk Field yg terakhir menjadi True.
      Sedangkan untuk standar penggunaan mas Wahyu bisa menghilangkan sebagian field nya, contohnya seperti ini:

      setcookie("username","$username",time()+3600000);

      Kedua nya sudah saya coba dan berhasil di semua Browser termasuk Opera.
      Untuk proses logoutnya jg bisa sedikit di modifikasi seperti ini:

      setcookie("username","",time());

      Semoga bisa membantu..... Thank's!

      Hapus
  2. Thanks for sharing...

    ijin sedot gan :)

    BalasHapus
  3. gan mau nanya , ko punya saya g bisa terus login yaa ? tiap login d redirect ke indek dan hrus login terus ? mohon pencerahannya . :)

    BalasHapus
    Balasan
    1. Mungkin cookie nya ga tersimpan di Browser dengan benar, silahkan cek kembali kode nya... pastikan baris kode pada login.php seperti ini:

      setcookie('username', $username, time()+3600000);
      setcookie('password', $password, time()+3600000);

      Tes dengan browser Firefox,,
      - Coba bersihkan dulu semua Cookie di Browser nya (Menu Firefox>>History>>Clear Resent History>>Ok).
      - Coba lewatkan dulu penggunaan Ajax,
      - Coba akses langsung ke source.php nya setelah login, apa ada error yg muncul...?

      Kalo ada seperti apa error nya?

      Hapus
    2. Assalamualaikum bang maaf ngikut nanya juga kebetulan masalah saya sama dengan masalah mr. aaaa dan error nya tu munculnya kaya gini :
      Warning : cannot modify header information - headers alredy sent by (output started at D:\xampp\htdocs\cobaPHP\online\login.php:1) in C:\xampp\htdocs\cobaPHP\online\login.php on line 17
      Warning : cannot modify header information - headers alredy sent by (output started at D:\xampp\htdocs\cobaPHP\online\login.php:1) in C:\xampp\htdocs\cobaPHP\online\login.php on line 18
      ^_^
      masalahnya itu ada pada :
      setcookie('username', $username, time()+3600000);
      setcookie('password', $password, time()+3600000);

      saya bingung harus gimana (malum masih newbie), mohon solusinya dari abang. terimakasih sebelumnya (materinya bagus sangat ^_^)

      Hapus
    3. Coba periksa pada seluruh file php nya, terutama pada file login.php dan koneksi.php
      Kemungkinan ada baris kosong/spasi sebelum kode php, contoh:

      ...Kosong...<?php KODE DISINI ?>...kosong...

      Coba hilangkan baris/spasi kosong nya, kalo ada pasti akan error, karena spasi di anggap sebagai output html...

      Hapus
  4. gan mau tanya saya bikin web pake dreamweaver trus ada login user name sama pass. cara aktifin login usernamenya gimana ya gan kalo make xampp bisa ga? karna saya make xampp dan saya pemula hiihi. tolong dibales ya gan :)

    BalasHapus
  5. assalamualaikum bang mau tanya juga tentang cara buat chatbox / kaya bikin status di FB gitu tapi masuknya ke DB yg kita buat ! itu cara bikin scrip php yg lebih signifikannya gmana ? trus masalah buat iterasi tiap tablenya gimana ya ?
    jadi pengen mirip kaya bikin status d FB tapi buka desainnya melainkan mekanismenya ?
    klo ada materinya trutama contoh scripnya saya mau minta bang !!! ^_^ terimakasih

    BalasHapus
    Balasan
    1. Untuk materi nya, mungkin bs buat beberapa table, Contoh sederhana nya: user, teman, dan status.

      Kemudian jika ada salah seorang user yg membuat status, akan masuk ke table status, dengan menyertakan field user_id nya, sedangkan status tersebut akan dapat dilihat oleh user_id yang sudah terdapat pada table teman.

      Itu hanya gambaran sj,, sedangkan untuk mekanisme FB yg sebenarnya sy blum paham, untuk Contoh yg sederhana nya bs sy buatkan, insya allah klo ad waktu,, coba cari dulu di Google barangkali sudh ada yg membuatnya....

      Thank's

      Hapus
  6. maaf gan tanya,,

    ini kenapa ya kug eror di login nya,,

    Notice: Undefined index: username in C:\xampp\htdocs\ofline\login.php on line 3

    Notice: Undefined index: op in C:\xampp\htdocs\ofline\login.php on line 9

    BalasHapus
    Balasan
    1. Error tersbut, sbnr ny hany peringatan sj,,
      Coba tambahkan tanda petik pada bag yg sy ksh tanda tebal:

      if($_REQUEST['op'] == "login")
      {
      $username = $_POST[username];
      $password = $_POST[password];


      Menjadi:

      if($_REQUEST['op'] == "login")
      {
      $username = $_POST['username'];
      $password = $_POST['password'];


      Jika msh ad yg error, silahkan cari yg blm menggunakan tanda petik tersebut, kemudian tambahkan...
      Untk php versi trbaru skrg udh ga mendukung cara lama lg,

      Maf br bs Respon...

      Hapus
  7. gan mau nanya dong.. lagi on gak nih?

    BalasHapus
  8. gan, ane mau tanya.
    saya sudah bisa login trus kow muncul tulisan kaya gini:
    Set-Cookie: sitedi_=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22c03f1266675565e5f8e0a6afe2e198a8%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A14%3A%22112.215.65.245%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A102%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F34.0.1847.131+Safari%2F537.36%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1400038307%3B%7D34b3c8
    maksudnya gimana ya gan ?

    BalasHapus
  9. gan di dalam ziddu nya sudah expired...nanya yang request op di situ variabel yang mana objek yang mana nya gan...dak bisa login....

    BalasHapus