Tue 26 Sep 2006 21:03:22
เรื่องการ login ครับคือผมต้องการแบบว่าถ้าเรามี username และ password อยู่หากเราใช้ username ของเราแล้วป้องกันไม่ให้คนอื่นเข้า username ของเรานี้ในเครื่องอื่นได้ในขณะที่เรากำลังใช้งานอยู่ คือผมอยากให้พี่ดูโค้ดหน่อยครับว่าควรแก้ส่วนใหนบ้าง
****************************************************
<%
bulAction=Request.Form("Login")
Select Case bulAction
Case "Login" ' <=== Case นี้คือ มีการกด Submit ส่งค่า login เข้ามา
strUsername=trim(Request.Form("txtUserName"))
strPassword=trim(Request.Form("txtPassword"))
If strUsername="" Then '<=== ไม่ได้ใส่ รายละเอียดในช่อง username
strErrorUsername="กรุณาระบุช้อมูลรหัสผู้ใช้"
Else
If strPassword="" Then '<=== ไม่ได้ใส่ รายละเอียดในช่อง password
strErrorPassword="กรุณาระบุรหัสผ่าน"
Else
'==========================
' ตรวจสอบทั้งหมด ผ่านฐานข้อมูล
'==========================
' Set Conn=Server.CreateObject("ADODB.Connection")
' Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.Mappath("Affairs.mdb")
'======Open Recordset===================
SQL="SELECT * FROM tblLoginAdmin WHERE userNameTraffic='"&strUsername&"' "
Set RS=Conn.Execute(SQL)
if Session("sUsername")<>RS("userNameTraffic") then
If RS.EOF Then '<< === ตรวจสอบเปรียบเทียบ ฐานข้อมูลไม่พบ
strErrorLoginFaild="ไม่พบข้อมูลเจ้าหน้าที่"
Else
If RS("PasswordTraffic")<>strPassword Then '<< === ตรวจสอบรหัสผ่าน
strErrorLoginFaild="รหัสผ่านไม่ถูกต้อง"
Else
Session("sUsername")=RS("userNameTraffic")
RS.Close
Conn.Close
Set RS=Nothing
Set Conn=Nothing
Session("bulLoginFlag")="True"
Session("adlevel")="1"
Session("logout")="1"
Response.Redirect("adminmain.asp")
End If
End If
Else
%>
<script language=javascript>
alert("ชื่อผู้ใช้นี้กำลังเข้าใช้งานระบบอยู่ค่ะ")
history.back("Adminlogin.asp")
</script>
<%
End If
RS.Close
Conn.Close
Set RS=Nothing
Set Conn=Nothing
End If
End IF
Case Else ' <=== Case นี้คือการเปิดมายังหน้า login นี้เป็นครั้งแรก ถ้าต้องการแสดงหรือส่งค่าอะไรก็ระบุไว้
End Select
%>
#users
- username varchar(50)
- password varchar(50)
- isonline (bool)
- sessiontime (datetime)
ตอน login ก็ใช้ SELECT username FROM users WHERE username='username' AND password='password' AND (isonline=false OR sessiontime < NOW-10 minute)
ถ้ามี username, password และยังไม่ถูกเซ็ท isonline หรือ เวลาที่ online นั้นน้อยกว่าเวลาปัจจุบันเป็นเวลา 10 นาที (เพื่อใช้ในกรณีที่ ไม่เกิดการ logout)
ถ้า login ได้คือมีทุกอย่างตาม condition ข้างบนก็ทำการ update isonline = true และ sessiontime เป็นเวลาปัจจุบัน
เมื่อมีการ logout ก็ให้ update isonline=false
สิ่งที่เพิ่มมาคือ ในทุกๆหน้าให้มีการ update sessiontime เป็นเวลาปัจจุบันเสมอ และทำการ update record ที่มี sessiontime < NOW -10 minute ให้ isonline=false
โครงสร้างนี้ใช้ได้กับทุก DBMS และทุกภาษาครับ

















