PHP Ionic Angular Phonegap AJAX Javascript CSS MySQL jQuery Forum


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

28 June 2015 By
ajax session logout

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ ajax session logout



เนื้อหาส่วนนี้เป็นการสร้างฟังก์ชั่นประยุกต์เพิ่มเติม เกี่ยวกับการใช้งานตัวแปร
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:: session logout ajax




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

กรุณาล็อกอิน เพื่ออ่านเนื้อหาบทความ

ยังไม่เป็นสมาชิก

สมาชิกล็อกอิน



หริอ สมัครสมาชิก และล็อกอิน ด้วย Facebook



อย่าลืมกด Like กด Share เป็นกำลังใจ ในการสร้างบทความใหม่ๆ น่ะครับ


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