พึ่งเคยใช้งานครั้งแรกโปรดอ่านที่นี่! howtouse!
x
  • Register
หางานด้าน IT อยู่เหรอ?

[PHP & MySQL] เทคนิค การแสดง Member ที่ Online อยู่ใน Web

+2 votes

อยากได้แนวคิดครับผม เอาแบบง่ายๆ มีประสิทธิภาพ

อยากให้เว็บแสดง Member ที่ยัง Online อยู่ หรือ จะเรียกประมาณว่า ยัง Active อยู่

ก็คือ ยังมีการคลิกลิงค์ อ่านบทความโน้นนี่นั่นอยู่ในเว็บนั้นๆอยู่

ถ้ายังไม่ Logoff หรือ อยุ่เฉยๆ นิ่งเงียบเป็นเวลานานๆ

 

ไม่แน่ใจว่าใช้เทคนิคหรือวิธีการอะไรได้บ้าง จะต้องออกแบบฐานข้อมูล เผื่อในเรื่องนี้ด้วยหรือไม่


*** [เพิ่มเติม เพิ่งคิดออก] 

เท่าที่ผมคิดไว้นะครับ ยังไม่เคยทำ ประมาณว่า
 


เวลาที่ Member คลิก ลิงค์ต่างๆในเว็บ อาจจะทำเฉพาะลิ้งหลักๆ

จะทำการ INSERT Username อาจจะมาจาก SESSION ของผู้ที่ Login นั้นๆ

และก็ Stamp วันที่เวลาลงไปใน DB เก็บเป็นตาราง นึง ไว้เลย

 

เช่น ตาราง

MemberCheckIN

- UserName = VARCHAR(200)

- CheckInDT = DateTime

 

ทีนี้ ในส่วนของเว็บ ที่จะแสดงว่ามีใคร Online อยู่บ้างก็ Query ที่ตางรางนี้ที่เดียว

เทียบกับ วันที่เวลาปัจจุบัน ย้อนหลังไปสัก n ชม.
แล้วก็เอา UserName ไปแสดง

 

SELECT DISTINCE

 UserName

FROM MemberCheckIN

WHERE CheckInDT <= 'วันที่เวลาปัจจุบัน'

 AND CheckInDT >= 'วันที่เวลาปัจจุบัน ลบ n ชม'


ประมาณว่า 1 คลิก ก็ CheckIn ทีนึง เพื่อรายงานตัวว่ายัง Active อยู่นะ
ถ้าเงียบไป n ชม. แสดงว่าไม่อยู่แล้ว

ถามเมื่อ May 2, 2012 in PHP & MySQL & Ajax โดย phanithanj (1,139 คะแนน)
edited May 3, 2012 โดย phanithanj
   

3 Answers

0 votes
คล้ายๆ fb หรือป่าวครับ อาจใช้การ เช็ค event mouse ดูครับ ถ้าไม่มีการขยับเกินกี่นาที จะให้สถานะเป็นอะไร ตอน login ก็ประกาศ session status เก็บไว้ใช้ ในตอน เช็ค event mouse ต่อ ถ้าจะใช้ db ก็เพิ่ม ตาราง ที่เก็บค่า ว่า member login เมื่อไหร่ อาจจะมี ฟิล์ด userid,ip,date,status ฯลฯ (คราวๆ ก็ประมาณนี้ครับ)
ตอบเมื่อ May 2, 2012 โดย Takumi Khun (218 คะแนน)
+1 vote

Member ที่ Online อยู่หมายถึง

  1. Member คนอื่นๆ ที่กำลังเปิด Web อยู่, หรือ
  2. Login ค้างไว้แต่อาจจะปิด browser ไปแล้วยังไม่ได้ Logout

ถ้ากรณีแรก

  • Ajax ยิงทุกๆ n วินาที สมมติว่า n = 30 แล้วกัน เพื่อส่ง user ไปยืนยันว่ายัง online อยู่ (ทาง server ไป insert/update sync time) และส่ง update member time ว่า Member list ที่แสดงนั้นเป็นอันล่าสุดหรือเปล่า พอส่งไป server แล้ว member time ไม่ใช่ล่าสุดก็ส่ง list กลับมาให้ javascript update member list ให้
  • ทาง server เก็บ Member ที่ Online ไว้ใน database พร้อม sync time เวลาที่ Ajax ยิงมาเพื่อยืนยันว่า online ล่าสุด ส่วน update member time เก็บใส่ file ก็ได้ แค่ค่าเดียว
  • มี cron (หรือ schedule task ใน Windows) run ทุก 1.5 x n วินาที (กัน delay ตอน ajax request) เพื่อ check sync time ว่ามี sync ภายในช่วงนั้นไหม ถ้า sync time ของ user ไหนนานแล้วก็ให้ลบ ออกจากตาราง แล้ว update member time ใน file ที่สร้างไว้

 

ตอบเมื่อ May 3, 2012 โดย Krurkrit Phoosakul (1,174 คะแนน)
ผมอาจจะตั้งคำถามผิดไปนิด

ประมาณว่า ให้เว็บแสดง Member ที่ Login ค้างไว้อยู่
เช่น ไว้ใช้ใน เว็บบอร์ด

ใครที่ Login เข้ามาโพส, คอมเม้น หรือมาอ่านกระทู้
ก็จะถือว่ายังออนไลน์อยู่


ถ้าอยู่เฉยๆ นานๆ สัก n นาที ก็จะตัดทิ้งไปไม่ถือว่า ออนไลน์
แต่ไม่เกี่ยวกับ Session ของ Member นั้น นะ

ประมาณว่า เอาไว้แสดงโชว์ที่เว็บเฉยๆ
ก็คือใช้ show member คนอื่นๆ รวมถึง user เราด้วย ที่กำลังทำอะไรอยู่ เช่น พิมพ์ เลื่อน mouse อะไรด้วย งั้นก็ต้องดัก event ทั้ง mouseover, keypress บน tag body แหละครับ คอย update ตัวแปรที่เก็บเวลาว่า event ล่าสุดเมื่อไร พอ ajax จะยิง request ส่งไปทาง server ก็ check เวลาตรงนี้ก่อน ถ้านิ่งเกินเวลาที่กำหนดก็ไม่ส่งไป แต่ผมว่าเครื่องจะทำงานหนักเกินไปนะ
เท่าที่ผมคิดไว้นะ ยังไม่เคยทำ ประมาณว่า

เวลาที่ Member คลิก ลิงค์ต่างๆในเว็บ อาจจะทำเฉพาะลิ้งที่สำคัญ

จะทำการ INSERT Member Username ลงไป
อาจจะมาจาก SESSION ของผู้ที่ Login นั้นๆ
และก็ Stamp วันที่เวลาลงไปใน DB เก็บเป็นตาราง นึง ไว้เลย

ทีนี้ ในส่วนของเว็บ ที่จะแสดงว่ามีใคร Online อยู่บ้าง
ก็ SELECT DISTINCE ที่ตางรางนี้ที่เดียว

เทียบกับ วันที่เวลาปัจจุบัน ย้อนหลังไปสัก n ชม.
แล้วก็เอา UserName ไปแสดง

ประมาณว่า 1 คลิก ก็ CheckIn ทีนึง เพื่อรายงานตัวว่ายัง Active อยู่นะ
ถ้าเงียบไป n ชม. แสดงว่าไม่อยู่แล้ว
0 votes

ขอแนะนำบริการของผมเองครับ

https://websocket.asia

ดูตัวอย่างที่ 2 นะครับ
https://websocket.asia/demo/user_a.html

ตอบเมื่อ Sep 5, 2012 โดย remove (121 คะแนน)

Related questions

+1 vote
1 คำตอบ
+2 votes
2 คำตอบ
0 votes
0 คำตอบ
0 votes
1 คำตอบ
786 views ถามเมื่อ Oct 6, 2012 in PHP & MySQL & Ajax โดย Eggvalue (1,179 คะแนน)
...