Tue 6 May 2008 15:40:09
สวัสดีค่ะ ขอถามผู้รู้ทุกท่านค่ะ เกี่ยวกับ User Online คือตอนนี้ได้ทำระบบสมาชิก เมื่อสมาชิก login เข้าไป ก็จะมีการบันทึกในฐานข้อมูลว่าสมาชิกคนนี้ได้เข้ามา login แล้ว และไม่สามารถ login ซ้าได้อีก นอกจากจะมีการกด logout ออก แต่ปัญหาก็คือว่า ถ้าสมาชิกไม่ได้ logout ออกเอง แต่ ปิดบราวเซอร์ หรือ timeout จะทำให้ไม่มีการเคลียร์ค่าในฐานข้อมูล ทำให้สมาชิกคนนั้น ไม่สามารถ login เข้าใช้งานได้อีก คำถามก็คือว่า มีวิธีไหนที่จะ update ฐานข้อมูล ก่อนที่ session จะ timeout และพอปิดบราวเซอร์ ก็ update ฐานข้อมูลทุกครั้ง
Tue 6 May 2008 16:43:55
http://articles.modoeye.com/Design%20and%20Development/Algorithm%20and%20Logics/Common%20problem%20with%20user%20online.html
Wed 7 May 2008 17:30:02
ในการทำระบบผู้ใช้งานให้ปลอดภัย โดยไม่ให้มีการใช้ account ในการ login ซ้ำกันในเวลาเดียวกันนั้น โดยส่วนมากจะทำการสร้าง field เพื่อเก็บว่า user นั้นๆได้ทำการ login แล้วและทำการ set ค่ากลับเมื่อมีการ logout แต่ปัญหาที่พบของการทำงานแบบนี้คือ เหตุการณ์ที่ account นั้นๆไม่ทำการ logout ไม่ว่าจะด้วยเหตุผลใด ทำให้ไม่สามารถ login ได้อีกต่อไป
ตัวอย่างโครงสร้างตารางแบบนี้คือ
| userid | integer |
| username | varchar |
| password | varchar |
| islogon | boolean |
จากปัญหาดังกล่าวเราสามารถแก้ไขได้โดย การออกแบบ policy ของ application ใหม่จากการตรวจสอบแค่ว่า logon หรือยัง เปลี่ยนเป็นเมื่อไม่มี activity เกินเวลาที่กำหนดให้ถือว่าเป็นการ logoff ซึ่ง policy แบบนี้จะเห็นได้ใน application ที่มีการติดต่อสื่อสารในฝั่ง server application ทั่วไปที่เรียกว่าค่า timeout
ทีนี้เรามาดูการสร้างให้ application ของเรามี timeout อย่างง่ายๆกัน นี่คือตัวอย่างตารางข้อมูล
| userid | integer |
| username | varchar |
| password | varchar |
| logontime | datetime |
เรามาออกแบบ policy ของระบบคือให้มี timeout เป็น 10 นาที การทำงานก็คือ เมื่อมีการพยายาม login ก็ทำการตรวจสอบเพิ่มว่า logontime มีค่าน้อยกว่าเวลาปัจจุบันเกิน 10 นาทีหรือไม่ถ้าใช่ก็สามารถให้เข้าสู่ระบบได้
งานที่เพิ่มขึ้นมาคือเราต้องทำการบันทึกเวลาปัจจุบันเข้าไปเสมอเมื่อ user นั้นมี activity เท่านั้นครับ
------------------------------------------------------------------------------------------------
ขอบคุณมากๆนะคะสำหรับคำตอบ คือพอมีแนวทางบ้างแล้วค่ะ แต่ยังไม่ค่อยเข้าใจค่ะ เลยขอถามอีกหน่อยค่ะ
คือยังไม่เข้าใจประโยคนี้ค่ะ "เมื่อมีการพยายาม login ก็ทำการตรวจสอบเพิ่มว่า logontime มีค่าน้อยกว่าเวลาปัจจุบันเกิน 10 นาทีหรือไม่ถ้าใช่ก็สามารถให้เข้าสู่ระบบได้"
1.หมายถึงว่าพอเช็ค username password ถูกต้องแล้ว ให้บันทึก logontime เลยหรือป่าวจากนั้นค่อยเปรียบเทียบกับเวลาปัจจุบัน ตรงนี้เพื่ออะไรเหรอคะ
2.เดิมดิฉันเคยมีตารางที่มีฟิลด์ islogon อย่างตารางแรก คือเช็คloginซ้ำ แล้วตอนนี้ยังต้องมีฟิลด์ดังกล่าวอยู่หรือป่าวคะ
Wed 7 May 2008 20:27:57
สวัสดีค่ะ คุณ webmaster ที่ดิฉันถามไป 2 ข้อ ข้างบน ตอนนี้เข้าใจ และทำตามได้แล้วค่ะ (หลังจากปิดคอมพิวเตอร์ แล้วไปทำความเข้าใจ) ปรากฎว่าใช้งานได้เป็นอย่างดี ต้องขอบคุณอีกครั้งนะคะ ขอบคุณมากๆ เลย

















