PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

ประยุกต์ อายุตัวแปร session และการ logout ด้วย ajax อัตโนมัติ

28 June 2015 By


เนื้อหาส่วนนี้เป็นการสร้างฟังก์ชั่นประยุกต์เพิ่มเติม เกี่ยวกับการใช้งานตัวแปร
session ปรับปรุงจากเนื้อหาของบทความเก่า
 
สร้างฟังก์ชัน PHP กำหนดเวลาหมดอายุให้ตัวแปร SESSION อย่างง่าย 
http://www.ninenik.com/content.php?arti_id=184 via @ninenik
 
ฟังก์ชั่นที่ประยุกต์ใหม่เพิ่มเติมนี้ทำอะไรได้บ้าง
- ตรวจสอบสิทธิการใช้งานหน้าเพจเฉพาะ ด้วยตัวแปร session
- กำหนดอายุของตัวแปร session แบบฟิกเวลาใช้งาน
- กำหนดอายุของตัวแปร session แบบอัพเดทเวลาล่าสุด
- ดัดแปลงใช้งานร่วมกับ ajax ทำระบบ logout อัตโนมัติ
- กำหนดลิ้งค์ไปหน้าเพจที่ต้องการ 
 
เริ่มต้นอย่างแรกสร้างไฟล์ session_expire.php (ค่าตัวแปรด้านในสามารถ
ดัดแปลงได้ตามความเหมาะสม)
 
<?php
function setSessionTime(
            $_timeSecond,
            $url=null,
            $return=null,
            $check_access=null,
            $renewTime=null
        ){

    if($check_access==null && $url!=""){
       header("location:".$url);            
        exit;
    }
    
    $data_back=0; // 0 คือ ยังไม่ล้างตัวแปร 1 คือ ล้างค่าตัวแปรแล้ว
    if(!isset($_SESSION['ses_time_life'])){
        $_SESSION['ses_time_life']=time();
    }
    if(isset($_SESSION['ses_time_life']) && time()-$_SESSION['ses_time_life']>$_timeSecond){
        if(count($_SESSION)>0){

            // วนลูป unset ตัวแปร session ทั้งหมด      
               foreach($_SESSION as $key=>$value){
                unset($$key);
                unset($_SESSION[$key]);
               }

            //    หรือเฉพาะตัวแปรที่ต้องการ
//            unset($_SESSION['user']); // กำหนดตัวแปร session อื่นๆ ที่ต้องการ unset ต่อจากนี้ได้
 //           unset($_SESSION['ses_time_life']);  // กรณีกำหนดเฉพาะ ต้องมี บรรทัดนี้ด้วยเสมอ
            
            if($return){
                $data_back=1;
                return $data_back;
                exit;
            }            

            // ถ้ามีการกำหนด url หลังจาก unset ก็ให้ ลิ้งค์ไปหน้านั้นๆ
            if($url){
                header("location:".$url);
                exit;
            }
        }
    }else{
        // อัพเดทเป็นเวลาล่าสุด
        if($renewTime==true){
            $_SESSION['ses_time_life']=time();
        }
        if($return){
            $data_back=0;
            return $data_back;
            exit;
        }        
    }
}
?>

 
 
เงื่อนไขตัวอย่างประกอบ เรามีไฟล์ประกอบตามนี้
1. หน้า login อย่างง่าย กรอกแค่ user แล้วกด login
2. ทำการสร้างตัวแปร session ชื่อ $_SESSION['user'] แล้วส่งไปหน้า สมาชิก
    member.php
3. หน้า member.php แสดงข้อมูล ตัวแปร $_SESSION['user'] มีการกำหนด
    อายุของตัวแปร session และค่าอื่นๆ หน้านี้ หากเมื่อตัวแปร session ถูกทำลาย
    ตามกำหนดเวลาที่ตั้งไว้ ก็จะทำการส่งไปหน้า login.php
4. เพิ่มโค้ด ajax หากต้องการตรวจสอบการหมดอายุของตัวแปร session และให้ทำการ
    logout อัตโนมัติ
 
ไฟล์ login.php
 
<?php
session_start();
include("session_expire.php");
?>
<?php
if(isset($_POST['user'])){
    $_SESSION['user']=$_POST['user'];
    header("Location:member.php");
    exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>

<div style="margin:auto;width:80%;">
  <a href="member.php">Member Link</a>
   <form method="post" action="">
    <input type="text" name="user" id="user">
    <input type="submit" name="submit" value="Login">
    </form>
</div>    
    
</body>
</html>

 
 
ไฟล์ member.php
 
<?php
session_start();
include("session_expire.php");
setSessionTime(10,"login.php",null,$_SESSION['user'],true);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Member</title>
</head>
<body>
    <div style="margin:auto;width:80%;">
    MEMBER <?=$_SESSION['user']?>
    <pre>
        <?php print_r($_SESSION); ?>
        <?php
            echo "<br>";
            echo date("Y-m-d H:i:s");
            echo "<br>";
            echo date("Y-m-d H:i:s",$_SESSION['ses_time_life']);
            echo "<br>";
        ?>
    </pre>
    </div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>      
<script type="text/javascript">  
$(function(){  
 
//  ถ้าต้องการใช้งาน auto logout ด้วย ajax  ให้เอา comment ส่วนนี้ออก    
//    setInterval(function(){ // กำหนดการทำงานทุกกี่วินาที
//        $.post("check_session.php",function(data){ // เรียกไฟล์ตรวจสอบ session
//           if(data==1){ // เมื่อ session ถูกทำลายแล้ว
//                window.location="login.php"; // ส่งไปหน้า login.php  
//           }
//        });
//    },5000); // กำหนดวินาที ที่ตอ้งการ ทุก 1 นาทีหรือ 60000 ก็ได้ ตัวอย่างกำหนดแค่ทุกๆ 5 วินาที
    
});  
</script>            
</body>
</html>

 
 
ไฟล์ check_session.php (กรณีใช้งาน ajax logout)
 
<?php
session_start();
include("session_expire.php");
echo setSessionTime(10,null,true); // อายุ session 10 วินาที คืนค่าสำหรับ ajax
exit;
?>
 
 
วิธีการใช้งาน หรือการกำหนดค่า
 
<?php
session_start();
include("session_expire.php");
setSessionTime(10,"login.php",null,$_SESSION['user'],true);
?>
 
ให้วางโค้ดตามรูปแบบด้านบนในไฟล์ที่ต้องการ 
 
setSessionTime(10,"login.php",null,$_SESSION['user'],true);
 
จากรูปแบบ
 
setSessionTime(
    เวลาวินาทีของอายุ,
    ไฟล์ที่ต้องการลิ้งค์ไปเมื่อ session ถูกทำลาย,
    การส่งค่ากลับกรณีใช้กับ ajax,
    ตัวแปร session ที่ต้องการกำหนดสิทธิ์เข้าเพจ,
    อัพเดทเวลาล่าสุดอัตโนมัติ
    );
 
ค่าที่ 2 -5 สามารถกำหนดเป็น null ถ้าไม่ต้องการใช้งาน ขึ้นกับแล้วแต่เงื่อนไข
 
ตัวอย่งการกำหนดค่า
 
ให้ตัวแปร session หมดอายุภายใน 10 นาที หากไม่ได้ login หรือตัวแปร session
ถูกทำลายแล้ว ให้ไปที่หน้า login.php ไม่ได้ใช้ค่าสำหรับ ajax 
มีการเช็คการเข้าใช้งานเพจเฉพาะด้วยตัวแปร session ชื่อ $_SESSION['user_id']
และให้อัพเดทเวลาใช้งาน อัตโนมัติ
สามารถกำหนดได้เป็น
 
setSessionTime(600000,"login.php",null,$_SESSION['user_id'],true);
 
ให้ตัวแปร session หมดอายุภายใน 10 นาที 
ใช้ค่าสำหรับ ajax 
สามารถกำหนดได้เป็น
* การใช้งาน ajax ต้องไม่อัพเดทเวลาใช้งานอัตโนมัติ

setSessionTime(600000,null,true); 

 
ถ้าต้องการใช้งานการ logout อัตโนมัติด้วย ajax ให้แทรกโค้ดส่วนนี้
ในไฟล์ที่ต้องการเช็ค ตามรุปแบบนี้ (สามารถใช้วิธีการ include ได้)

<?php
session_start();
include("session_expire.php");
setSessionTime(10,"login.php",null,$_SESSION['user'],true);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
 
    
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>      
<script type="text/javascript">  
$(function(){  
 
//  ถ้าต้องการใช้งาน auto logout ด้วย ajax  ให้เอา comment ส่วนนี้ออก    
    setInterval(function(){ // กำหนดการทำงานทุกกี่วินาที
        $.post("check_session.php",function(data){ // เรียกไฟล์ตรวจสอบ session
           if(data==1){ // เมื่อ session ถูกทำลายแล้ว
                window.location="login.php"; // ส่งไปหน้า login.php  
           }
        });
    },5000); // กำหนดวินาที ที่ตอ้งการ ทุก 1 นาทีหรือ 60000 ก็ได้ ตัวอย่างกำหนดแค่ทุกๆ 5 วินาที
    
});  
</script>      
</body>
</html>



เนื้อหาที่เกี่ยวข้อง



Tags:: logout ajax session

เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน และลงชื่อติดตาม


สมัครสมาชิกได้ที่        ล็อกอินได้ที่   





URL สำหรับอ้างอิง