ใช้ session อย่างไร ถ้าต้องการ login ได้แค่ เครื่องเดียวเท่านั้น ของ user นั้นๆ ป้องกัน login ซ้ำ
สุดยอดขอบคุณคับกำลังคิดหาพอดี
Date :
2009-10-08 22:02:32
By :
apicha31
ขอบคุณครับ พี่วิน ไม่ผิดหวังเลยครับ
ขอบคุณที่ให้ความกระจ่างครับ
Date :
2009-10-08 22:17:20
By :
khunset
UPDATE user SET TIME_LOGIN= NOW() WHERE USER = 'user'
จะเอาไปไว้ในส่วนไหนคับ แล้วต้องมีการสร้างเงื่อนไขควบคุมหรือเปล่าคับ
ตัวอย่างการใช้งานด้วยคับ ผมยังไม่เก่ง ดูยังไงก็ยัง งงคับ ช่วยอิบาย บรรทัดนี้ให้ด้วยคับ
Date :
2009-10-22 18:23:00
By :
chaynuwong
เห็นคำถาม ผมก็คิดเหมือนพี่วิน เหมือนกันเลย ว่าสร้าง ตารางมา เก็บค่าการ login ไว้
แล้วพอ logout ออก ก็มาอัพเดต เคลียร์ค่าเหมือนเดิม ^-^
เรื่อง ปิดเพจ โดยไม่ได้ logout ผมคุ้นๆ ว่า เราสามารถเขียน php เพื่อให้ทำงานต่อ แม้ user จะออกไปแล้ว
ไม่ทราบว่า เอามาประยุกต์ใช้แทนกันได้ไหมครับ พี่วิน
คิดว่า น่าจะได้ นะ
Date :
2009-10-22 20:14:18
By :
yomaster
ขุดๆๆ คำตอบยังไม่ชัดเจน คับ อยากได้ ชัวร์ๆ คับ
Date :
2009-10-22 22:52:22
By :
chaynuwong
ถ้ามีคนแอบใช้ user เราแล้ว status มันก็เป็น 1
แล้วที่นี้ ณ เวลาเด๋วกันพอเราจะเข้าใช้งานเราก็ใช้งานไม่ได้สิครับ
Date :
2010-04-05 17:25:15
By :
อยากขี้เหล่
พี่วินช่วยอธิบายบรรทัดสุดท้ายอีกหน่อยครับงง
Code (PHP)
UPDATE user SET TIME_LOGIN= NOW() WHERE USER = 'user'
Date :
2010-06-08 14:09:49
By :
aimoomoo
เพิ่ม เวลา login เป็น เวลาปจุบัน ครับ where ผู้ใช้งาน=ผู้ใช้งานขณะนี้
Date :
2010-06-08 14:12:25
By :
deawx
ดังนั้นเราต้องเอา code ตัวนี้ไปวางทุกๆ หน้า web สิครับ
Code (PHP)
UPDATE user SET TIME_LOGIN= NOW() WHERE USER = 'user'
ผมยังงงต่อว่าถ้า user ปิดหน้า web ไปเลย มันจะเปลี่ยนสถานะอย่างไรครับ
อธิบายหั้ยนิดหนึ่งครับ
Date :
2010-06-08 14:15:43
By :
aimoomoo
ถ้าใน asp หรือ .net จะมี event ของ global.asa หรือ global.asax ในการความคุม Event ตรงนี้อยู่ครับ ซึ่งจะง่ายกว่า php
Date :
2010-06-09 06:40:06
By :
webmaster
แบ่งเป็น 2 เงื่อนไขน่ะครับ
แทรกไว้ในหน้า Login ก่อนคำสั่งอื่น ๆ เป็นไปได้ 2 กรณีคือ
- ถูก run โดยผู้ใช้คนอื่นๆ ที่กำลังคลิกหน้านั้น ๆ อยู่
- ต่อให้ไม่มีคนรัน แต่เมื่อคุณกลับมา Login อีกครั้ง script นี้ก็จะถูกทำงานเป็นคำสั่งแรกอยู่แล้ว
Date :
2010-06-09 08:46:18
By :
webmaster
กกำลังหาพอดี ขอบคุณมากๆค่ะ
Date :
2010-06-09 08:58:11
By :
amster
ออเขาจัยแล้วครับเดียวขอนำไปลองก่อนครับ
Date :
2010-06-09 09:51:26
By :
aimoomoo
พี่วินครับ ผมกำลังศึกษาและทำเรื่องเกี่ยวกับ login อยู่พอดีเลยครับ รบกวนพี่วิน ทำตัวอย่างให้ดูหน่อยได้ไหมครับ ผมเพิ่งหัดเขียนครับ เลยไม่ค่อยจะเข้าใจหลักการเท่าไรครับ อยากจะดูตัวอย่างและลองศึกษาดูครับ
Date :
2010-12-01 14:06:39
By :
TT
ต้องเขียน session เพิ่มเติมหรือเปล่าคับ มีตัวอย่างการเขียนหรือเปล่าคับ
Date :
2011-02-28 13:39:22
By :
โปแกรมมั่ว
ถ้า ถ้า time น้อยกว่า session นั้นจะถูกลบทิ้งครับ ไม่มีปัญหา
Date :
2011-09-09 09:27:29
By :
webmaster
ไม้ต้องครับ มันลบทั้งหมดที่ session หมดอายุครับ
Date :
2011-09-09 09:40:54
By :
webmaster
อ๋อครับ ผมเข้าใจหลักการละ ขอบคุณมากครับพี่วิน
Date :
2011-09-09 09:44:47
By :
noppawut
เห็นด้วยทุกประการ 555
Date :
2011-09-09 11:24:53
By :
taomasaba
ขอบคุณค่ะ กำลังหาอยู่ค่ะ
Date :
2012-02-27 13:29:15
By :
bb
ทดสอบแล้วครับผ่านครับใช้ได้ครับ
Date :
2012-03-03 23:48:00
By :
jojo hitman
โค๊ดที่บอกมาทั้งหมดเขียนไว้ในหน้า update_login.php หรอคะพี่วิน และไฟล์ update_logout.php หรือคะ หรือเขียนไว้หน้า login.php และ logout.php เลยค่ะ
Date :
2012-07-09 16:29:51
By :
bangkok_2012
อยากได้แบบ ASP มีบ้างไหมอ่ะครับผม
แล้วแบบนี้ทำยังไงอ่ะครับผม
"ถ้าใน asp หรือ .net จะมี event ของ global.asa หรือ global.asax ในการความคุม Event ตรงนี้อยู่ครับ ซึ่งจะง่ายกว่า php"
ขอบคุณครับ
Date :
2012-09-30 03:59:32
By :
oreojung
ขอบคุณพี่ๆทุกคนครับกำลังหาอยู่พอดี
Date :
2013-04-19 12:01:23
By :
nana
มันยังไม่กระจ่างเลยค่ะ ยังงงว่าตกลงโค้ด
UPDATE user SET TIME_LOGIN= '".time()."' WHERE USER = 'user'
อันนี้เอาแทรกไว้ทุกหน้าแล้วใช่มั้ยค่ะ แล้วโค้ดนี้
UPDATE user SET STATUS ='0' WHERE TIME_LOGIN <='".(time()-1200)."'
ใช้ด้วยกันแทรกไว้ทุกหน้าเหมือนกันหรอค่ะ มันใช้ยังไงค่ะ ช่วยอธิบายเพิ่มอีกหน่อยได้มั้ยค่ะ เผื่อสมองตัวเองมันจะติ๊งบ้าง
ประวัติการแก้ไข 2013-04-22 09:18:17 2013-04-22 09:18:33
Date :
2013-04-22 09:17:27
By :
laongdow
อยากทราบว่าแล้วเมื่อเขาปิด window ไปเลย จะเขียนโค้ดยังไงเพื่อแก้ค่าที่ status ให้เป็น 0 ล่ะคะ ใครรู้ช่วยบอกที ฮึ ฮึ
Date :
2013-04-22 16:34:44
By :
aun aun
ขอบคุณมากคะ
ประวัติการแก้ไข 2013-08-22 13:24:29
Date :
2013-08-22 12:01:09
By :
vongole
แนวคิดเยี่ยมมาก
Date :
2013-08-22 12:42:09
By :
อ้อม
ขอบคุณมากครับ
ผมเอาไปผูกกับ ip อีกที คนปิดหน้าต่างลืม logout จะได้ไม่ต้องรอ 20 นาที
Date :
2013-08-23 15:20:34
By :
เมว
ขอโค้ดแบบเต็มหน่อยครับ
ผมไม่เข้าใจ
ปล. มือใหม่หัดเขียน PHP
Date :
2013-11-30 07:33:06
By :
Brokenza
สงสัยเพิ่งซื้อจอบมาใหม่ ขุดกันมันส์เลย ฮ่า ๆ ๆ
Date :
2013-11-30 13:57:44
By :
จอบ
Code (PHP)
<?php
include("include/include.inc.php");
mysql_query("UPDATE member SET exptime = '' WHERE username = '".$_SESSION["".$SeS_TiTle_NaME."username"]."'");
$_SESSION["".$SeS_TiTle_NaME."id"] = '';
$_SESSION["".$SeS_TiTle_NaME."username"] = '';
$_SESSION["".$SeS_TiTle_NaME."password"] = '';
$_SESSION["".$SeS_TiTle_NaME."tel"] = '';
header("Location: ".$_SERVER['HTTP_REFERER']."");
?>
หน้า login แก้ยังไงครับ
Date :
2013-12-11 00:33:46
By :
torres009
ผมอยาก ให้ อธิบายว่าเอาโค้ด ไปใส่ตรงไหนยังครับอ่ะครับพอดี กำลังศึกษา ไม่รู้เรื่องเท่าไหร่ครับ
และเราต้อง สร้างตารางดาต้าเบสยังไง
อยากได้ความละเอียดครับ
ส่วนมากไปดูที่ไหนมาก็ตอบเหมือนๆกันครับ
คนที่ไม่รู้ก็งงต่อไปอีกละ
คือผมไม่เก่งphp แต่ผมทำ VB ให้มันทำงานร่วมกับPHP อยู่ครับ
Date :
2014-04-21 21:25:13
By :
นักศึกษาของคุณ
No.37 เยี่ยมมาก ต้องหาวิธีการแก้ไขต่อ ข้อนี้น่าจะเป็น bug ของโปรแกรม ผมยังหาวิธีไม่ได้ ถ้าทำได้แล้วจะนำมาแชร์ให้ทุกๆ ท่าน นะครับ
Date :
2014-05-06 11:16:59
By :
abass
การแก้ปัญหาของ #37
กรณีของ 37 จะถือว่าเป็นการเปิดจากเบราเซอร์อื่นหรือเครื่องอื่น เพราะว่าปิดไปแล้วและเข้ามาในขณะที่ยังไม่ถึงเวลา auto logout
กรณีนี้แนะนำให้แก้ได้ 2 แบบตามลำดับความเข้มข้นของความปลอดภัย
เริ่มจากน้อยสุด
1. ใช้คุกกี้ระบุตัวตนเบราเซอร์
คือเมื่อล็อกอินสำเร็จเสร็จหมดแล้ว ก่อนจะไปหน้าอื่นๆ ให้ส่งคุ้กกี้ระบุตัวตนเบราเซอร์ไปด้วย เช่น คุกกี้ชื่อ browser_identity
ข้อมูลคือชื่อเบราเซอร์ เวอร์ชั่น วันที่ เวลา account id มาแบบต่อสตริงกันมาเลย แล้วเก็บลงทั้งในคุกกี้และในฟิลด์เพิ่มในตารางฐานข้อมูลผู้ใช้
กรณีล็อกอินตามเงื่อนไขคห. 37 หากติดยังไม่ auto logout ก็ให้ตรวจก่อนว่ามี cookie browser_indentity มั้ย มีแล้วเอามาเช็คในตารางผู้ใช้ว่าตรงกันมั้ย ถ้าตรงก็ล็อกอินได้
คุกกี้ browser_identity นี้อาจเก็บไว้สัก เดือนหนึ่ง หรืออย่างน้อยนานกว่าคุกกี้ผู้ใช้ 2 เท่า.
2. ใช้ระบบ token ผ่าน email
วิธีนี้ค่อนข้างปลอดภัยมากมายมหาศาล (ถ้าคุณใช้อีเมลที่มี 2 step verification เหมือนผม)
กล่าวคือ เมื่อติดปัญหาล็อกอินไม่ได้เพราะยังไม่ auto logout ก็ให้เสนอทางเลือกว่าผู้ใช้จะรอ หรือจะไปสร้าง token
วิธีสร้าง token ก็คล้ายๆลืมรหัสผ่าน กระบวนการเดียวกันเป๊ะ ไปกรอกอีเมล ตรวจอีเมลว่าตรงมั้ย ถ้าตรงก็สร้าง token แล้วเก็บใน db ผู้ใช้อันนึง ส่งไปทางอีเมลผู้ใช้อีกอันนึง ให้เค้าคลิกลิ้งค์เพื่อล็อกอิน
การล็อกอินผ่าน token ก็จะได้ url เช่น http://localhost/login.php?force_login_token=xXxXxXxX ก็เอา querystring force_login_token ไปตรวจว่าตรงกับใน db มั้ย ถ้าตรงก็เข้ากระบวนการตรวจ username password
พอล็อกอินสำเร็จก็ล้าง token ของผู้ใช้ใน db ซะ
สำหรับข้อ 2 ถ้าจะเพิ่มความปลอดภัยเข้าไปอีก ก็ให้เพิ่มฟิลด์เวลาด้วยว่า token นี้สร้างเมื่อไหร่ และให้ใช้เวลาไม่เกินกี่นาทีในการดำเนินการ ถ้าเกินก็ต้องไปสร้างใหม่ครับ
ประวัติการแก้ไข 2014-06-24 00:43:56
Date :
2014-06-24 00:42:17
By :
mr.v
เพิ่มเติมอีกหน่อยครับ
UPDATE user SET method='0' WHERE method='1' and TIME_LOGIN <='".(time()-1200)."'
ให้เช็ค method ด้วยเลย เพื่อจะได้ ผ่านไปเลย ไม่ต้องเสียเวลา เข้าสูโหมด update แล้ว ถึงเช็ค method ว่าเท่ากัน หรือไม่ เพื่อ update
เร็วขึ้นอีกหน่อย
Date :
2014-06-24 02:13:55
By :
Chaidhanan
มีเวลาจัดซะหน่อย
PHP ทำระบบ Login และป้องกันการ ล็อกอิน ซ้ำซ้อนใน User เดียวกัน (MySQLi , Duplicate Session)
Date :
2014-10-07 13:02:13
By :
mr.win
ขอบคุณคับ
Date :
2014-10-07 18:19:57
By :
esthook
ผมลองรันแล้วติดปัญหา user คนอื่นก็ยังเข้ามาใช้ได้ถึงแม้เราจะกำลัง log อยู่ก็ตาม จากนั้นผมก็เลยออกแบบเพิ่มเองเลย (ไม่รู้ถูกป่าว)อิอิ
โดยหลักการของผมคือ
1 เพิ่ม table IPaddress มาอีกคอลัม เพื่อแยกแยะเครื่องในกรณีที่มีคอมพิวเตอร์มากกว่า 1 ตัว
2 เช็ค status ก่อนเลยว่าเป็น 0 มั้ย กับค่า ip ของเครื่องเราเทียบกับค่า ip ใน mysql table
3 ถ้า status เป็น 1 และค่า ip เหมือนกัน แสดงว่ามีคนใช้คอมเครื่องนี้อยู่ให้แจ้งข้อความเตือนแล้วกลับไปหน้า Login
4 ถ้า status เป็น 0 แสดงว่าคอมพิวเตอร์เครื่องนี้ว่าง ส่วนค่า ip จะมีผลก็ตอนสถานะเป็น 1 ก็เข้าเงื่อนไขต่อไป
5 เมื่อผ่านสถานะว่างมาแล้ว ให้เช็ค user and password เทียบกับ ตารางใน mysql
6 ถ้าไม่ match ให้แจ้งเตือนว่า user and password ผิด แล้วรีเทรินกลับไปหน้า login
7 ถ้า match ให้ update status ใน mysql table ให้เป็น 1 พร้อมบันทึก เวลา update พร้อมทั้ง ค่า ip ด้วย
8 นอกนั้นก็ใช้ code ของคุณวินตามปรกติ ครับ
Date :
2016-09-17 10:29:42
By :
RJB
Load balance : Server 01