Login แบบที่กำหนดเวลาอยู่บนระบบได้

การ login ที่ป้องกันการอยู่บนเพจนานเกินไป หรือ เมื่อ login แล้วไม่ได้ logout โดยที่เมื่อครบกำหนดเวลาที่ตั้งไว้ จะต้อง login ใหม่เสมอ

หลักการก็คือ เมื่อ login สำเร็จ จะทำการบันทึกเวลา เมื่อ logon ลง session ไว้ และ ในหน้าที่ต้องการตรวจสอบการ login(testlogin .php) ก็ให้แทรกโค้ด เพื่อตรวจเวลที่บันทึกไว้ หากหมดเวลา ให้กลับมาหน้า login อีกครั้ง
 
<!--โค้ดหน้า Login-->
<?php
  //เวลาปัจจุบัน จาก server
  $hour=0; //เวลาทด เป็น + หรือ - ถ้าเวลาของ Server ไม่ตรงกับประเทศไทย
  $min =0; //เวลาทด เป็น + หรือ - ถ้าเวลาของ Server ไม่ตรงกับประเทศไทย
  $logtime=date("U",mktime( date("H")+$hour, date("i")+$min ));

  $action=$_POST["action];
  if (isset($action) && $action=="เข้าระบบ") {
    //สำหรับสมาชิก ลงทะเบียน หรือ เข้าระบบ
    $user=$_POST["user];
    $passwd=$_POST["passwd];

    //ตรวจสอบ username และ password ที่นี่
    //สมมุติว่า Login สำเร็จ ถ้าไม่สำเร็จให้ Unset($user)
    
    if ($user!="") {
      //บันทึก user ลง session
      session_start();
      $_SESSION["sesuser]=$user;
      $_SESSION["sespasswd]=$passwd;
      //บันทึกเวลาลง session
      $_SESSION["sestime]=$logtime;
      //เรียกไปหน้าหลัก สำหรับทดสอบ
      echo "<META HTTP-EQUIV=REFRESH CONTENT=\"0; URL=testlogin.php\">";
    }
  }
?>
          
<table>
<tr><td align="center" colspan="2"><font color=#555555 size=1>ฟอร์ม Login</font></td></tr>
<form method=post action="?">
<tr><td align=right><font color=#555555 size=1>user : </font></td><td><input size=15 type=text name=user maxlength=15></td></tr>
<tr><td align=right><font color=#555555 size=1>passwd : </font></td><td><input size=15 type=password name=passwd maxlength=15></td></tr>
<tr><td align=right colspan=2><input type=submit name=action value=เข้าระบบ title=\"สมาชิก เข้าระบบ\"></td></tr>
</form>
</table>

ฟอร์มสำหรับการ login ในหน้าหลักครับ


<!--โค้ดหน้า testlogin ที่จะเข้าเมื่อ login สำเร็จ-->
<?php
   session_start();
   
   //เวลาปัจจุบัน จาก server
   $hour=0; //เวลาทด เป็น + หรือ - ถ้าเวลาของ Server ไม่ตรงกับประเทศไทย
   $min =0; //เวลาทด เป็น + หรือ - ถ้าเวลาของ Server ไม่ตรงกับประเทศไทย
   $logtime=date("U",mktime( date("H")+$hour, date("i")+$min ));
   
   $action=$_GET["action];
   if (isset($action) && $action=="logout") {
    unset($_SESSION["sesuser]);
    unset($_SESSION["sespasswd]);
    unset($_SESSION["sespasswd]);
    session_destroy();
    
    echo "ออกจากระบบเรียบร้อย<br />";
   } else {
   
    $user=$_SESSION["sesuser];
    $passwd=$_SESSION["sespasswd];
    $time=$_SESSION["sestime];

    //คุณสามารถตรวจสอบ ความถูกต้องของการ Login หรือ สิทธิ์ในการเข้าถึงหน้านี้ได้ที่นี่
    //ถ้าไม่ถูกต้อง ให้ exit(); ออกจากหน้านี้ หรือ Redirect กลับไปที่หน้า Login ก็ได้

    if ($logtime-$time>60) { //กำหนดเวลาที่จะให้อยู่บนระบบได้ที่นี่ 60=1 นาที
      echo "คุณ $user Login นานเกิน 1 นาที แล้ว กรุณากลับไป Login ใหม่<br />";
      unset($_SESSION["sesuser]);
      unset($_SESSION["sespasswd]);
      unset($_SESSION["sespasswd]);
      session_destroy();
    
      echo "ออกจากระบบเรียบร้อย<br />";
    } else {
      echo "คุณ $user อยู่บนระบบนาน ".($logtime-$time)." วินาที แล้ว<br />";
      echo "ทดสอบ Click Refresh เป็นระยะๆ<br />";
      echo "<a href=?action=logout>ออกจากระบบ</a>";
    }
  }
?>

ส่วนที่ 2 ชื่อ testlogin.php ถ้าคุณต้องการตรวจสอบเวลา ที่มีการ Login เข้ามาแล้ว ให้ตรวจสอบด้วยโค้ดนี้ หรือ แทรกโค้ดนี้ในหน้าที่ต้องการตรวจสอบการหมดเวลาการ login อาจทำได้ง่ายๆ โดยการ include ไปยังหน้าที่ต้องการก็ได้
 
ผู้เขียน goragod โพสต์เมื่อ 02 เม.ย. 2551 เปิดดู 21,181 ป้ายกำกับ session
^