A-AA+then

php ปัญหาในการเช็ค login ซ้ำ

4,323
php ปัญหาในการเช็ค login ซ้ำ

    สวัสดีครับ คือรบกวนสอบถามเกี่ยวกับ Login ซ้ำหน่อยครับ
    คือ ณ ตอนนี้ถ้า user Login เข้ามา ก็จะเพิ่มข้อมูลเข้าตาราง check_user
    (ก็คือถ้ามีใครมา Login ซ้ำอีก ก็จะ Login ไม่ได้)
    และถ้า user Logout ออกก็จะไป ลบข้อมูลที่ตาราง check_user
    (เผื่อที่ให้สามารถกลับเข้ามา Login ได้อีก)
    
    ***ถ้า user เวลาเข้าก็ Login เวลาออกก็ Logout มันจะไม่มีปัญหาครับ
    แต่ ณ ทีนี้ ถ้า user Login เข้ามา แต่เวลาออกเข้าไม่ได้ออก Logout
    แต่ปิด Browser ไปเลย หรือบางทีไฟดับอะไรประมาณนี้ครับ
    มันก็จะเป็นปัญหา เวลากลับเข้ามา Login ใหม่ก็จะ Login ไม่ได้เพราะข้อมูลมันยังอยู่ใน
    ตาราง check_user
    ไม่ทราบว่าพอจะมีวิธีแก้ไขหรือเปล่าครับ ถ้ามีตัวอย่างด้วยจะขอขอบคุณมากเลยครับผม
    ต้องรบกวนด้วยนะครับ ขอบคุณครับ

     

    ////////////////////////////////////โค็ดหน้า check_login<?php
    session_start();
    include_once("../db/db.php");
    
    if(($_POST['check']== 1)AND($_POST[user]!='')AND($_POST[pass]!='')){//check ว่าค่าที่รับมาจาก login ทั้ง user และ pass ห้ามีค่าว่าง และค่า hidden ต้องเท่ากับ 1
     
      $us = $_POST['user'];
      $cp = $_POST['pass'];
              $sqllg = "SELECT * FROM $tbl_user WHERE user_user = '$us' AND user_pass = '$cp'";
               $sqllg_query = mysql_query($sqllg);
               $sqllg_fa =mysql_fetch_array($sqllg_query);
               
              /*ดึงข้อมูลจากดาต้าเบส ตาราง check_user และมีเงื่อนไขว่าถ้าค่าที่กรอกมาในหน้า login ค่า user เท่ากับค่า user ใน check_user*/
              $sql = "select * from $tbl_check_user WHERE ch_user = '$us' ";
              $result = mysql_query($sql);
              $row = mysql_fetch_array($result);
     
        if($cp != $sqllg_fa[user_pass] OR $us != $sqllg_fa[user_user]){                                                 
                    echo "<script type=\"text/javascript\">
                                    alert(\"login ไม่สำเร็จ ชื่อหรือรหัสผ่านไม่ถูกต้อง\");
                                    history.back();
                                </script>
";
                                }
        if($us == $row['ch_user']){//เช็คว่า user นี้มีการ login เข้ามาแล้วหรือยัง
                    echo "<script type=\"text/javascript\">
                                    alert(\"User นี้ มีผู้อื่นใช้งานอยู่\");
                                    history.back();
                                </script>
";
        }

        else{//เมื่อ login ผ่าน จะเพิ่มข้อมลเช้าไปในตาราง check_user
            $_SESSION['u_id'] = $sqllg_fa[user_user];
            $name_ch = $_SESSION['u_id'];
            $sqlrow="INSERT INTO $tbl_check_user(ch_user, ch_time)VALUES('$name_ch',  Now() );";
            $query2=mysql_query($sqlrow);
            echo "<script type=\"text/javascript\">
                            alert(\"login สำเร็จ\");
                            window.location='index.php'
                        </script>
";
             }

        }    
    else{
        echo "<script type=\"text/javascript\">
                                    alert(\"login ไม่สำเร็จ ห้ามมีค่าว่าง กรุณากรอกข้อมูลให้ครบ\");
                                    history.back();
                                </script>
";}        
    ?>

    
    
    
    ////////////////////////////////////โค็ดหน้า session ซึ่ง include ไว้ทุกหน้า<?php
    session_start();
    
    if($_SESSION['u_id] == ""){//ถ้ามาหน้านี้แบบไม่ได้ login ให้เด้งออกไปหน้า login
        header("Location:login.php");
    }
    
    include_once("../db/db.php");
    $name_user = $_SESSION['u_id'];
    
    if($_GET['logout'] == "logout"){//ถ้า logout ออก ก็จะลบข้อมูลค่าของ user ผู้นั้น ออกจากตาราง check user เพื่อที่จะให้กลับเข้ามา login ได้ใหม่
        $strSQL = "DELETE FROM $tbl_check_user ";
        $strSQL .="WHERE ch_user = '$name_user' ";
        $objQuery = mysql_query($strSQL);       
       
        session_destroy(); 
        echo "<script type=\"text/javascript\">
                    alert(\"logout เรียบร้อย\");
                    window.location='login.php'
                </script>
";   
    }

    ?>

1 ความคิดเห็น

555++++ ก็เป้นเรื่องปกติครับ

จริงๆมันก็ไม่มีวิธีการที่ 100% หรอกครับ เพราะโดยทั่วไปแล้ว User ส่วนใหญ่ ไม่ค่อย logout เวลาที่ออกจากเพจ การแก้ไขที่สามารถดำเนินการได้คือ

1.ใช้วิธีตรวจสอบช่วงเวลาการ login ล่าสุดครับ เช่น ถ้าช่วงเวลาที่ login ครั้งสุดท้ายคือ 10 นาทีที่แล้ว (หรือเท่าไรก็ตามแต่) ให้ถือว่า logout แล้ว เพราะโดยปกติแล้วผู้ใช้งานเว็บไซต์ เมื่อเข้ามาใช้งานเว็บ อาจต้องเปิดหน้าเพจไปเรื่อยๆ ซึ่งจะทำให้เวลาที่บันทึก เพิ่มไปเรื่อยๆ และโดยเฉลี่ยแล้ว คงไม่มีใครอยู่เพจใดเพจหนึ่ง นานเกิน 10 นาทีครับ (ช่วงเวลาก็แล้วแต่ประเภทของไซท์ละครับ บางเว็บ user อาจอยู่ในแต่ละเพจนานๆก็ได้)
2.อาจต้องใช้ตัวแปรอื่นร่วมด้วย เพื่อให้การตรวจสอบตัวตนแม่นยำขึ้นเช่น Sesson หรือ IP ซึ่งทั้ง 2 อย่างถ้าตรงกับรายการเดิม ก็พอเชื่อถือได้ว่า เป็น User เดิม
1
^