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

เขียนเมื่อ 9 ปีก่อน โดย Ninenik Narkdee
logout session ajax

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

ดูแล้ว 12,993 ครั้ง


เนื้อหาส่วนนี้เป็นการสร้างฟังก์ชั่นประยุกต์เพิ่มเติม เกี่ยวกับการใช้งานตัวแปร
session ปรับปรุงจากเนื้อหาของบทความเก่า
 
สร้างฟังก์ชัน PHP กำหนดเวลาหมดอายุให้ตัวแปร SESSION อย่างง่าย 
 
ฟังก์ชั่นที่ประยุกต์ใหม่เพิ่มเติมนี้ทำอะไรได้บ้าง
- ตรวจสอบสิทธิการใช้งานหน้าเพจเฉพาะ ด้วยตัวแปร session
- กำหนดอายุของตัวแปร session แบบฟิกเวลาใช้งาน
- กำหนดอายุของตัวแปร session แบบอัพเดทเวลาล่าสุด
- ดัดแปลงใช้งานร่วมกับ ajax ทำระบบ logout อัตโนมัติ
- กำหนดลิ้งค์ไปหน้าเพจที่ต้องการ 
 
เริ่มต้นอย่างแรกสร้างไฟล์ session_expire.php (ค่าตัวแปรด้านในสามารถ
ดัดแปลงได้ตามความเหมาะสม)
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?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
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?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)
 
1
2
3
4
5
6
<?php
session_start();
include("session_expire.php");
echo setSessionTime(10,null,true); // อายุ session 10 วินาที คืนค่าสำหรับ ajax
exit;
?>
 
 
วิธีการใช้งาน หรือการกำหนดค่า
 
1
2
3
4
5
<?php
session_start();
include("session_expire.php");
setSessionTime(10,"login.php",null,$_SESSION['user'],true);
?>
 
ให้วางโค้ดตามรูปแบบด้านบนในไฟล์ที่ต้องการ 
 
1
setSessionTime(10,"login.php",null,$_SESSION['user'],true);
 
จากรูปแบบ
 
1
2
3
4
5
6
7
setSessionTime(
    เวลาวินาทีของอายุ,
    ไฟล์ที่ต้องการลิ้งค์ไปเมื่อ session ถูกทำลาย,
    การส่งค่ากลับกรณีใช้กับ ajax,
    ตัวแปร session ที่ต้องการกำหนดสิทธิ์เข้าเพจ,
    อัพเดทเวลาล่าสุดอัตโนมัติ
    );
 
ค่าที่ 2 -5 สามารถกำหนดเป็น null ถ้าไม่ต้องการใช้งาน ขึ้นกับแล้วแต่เงื่อนไข
 
ตัวอย่งการกำหนดค่า
 
ให้ตัวแปร session หมดอายุภายใน 10 นาที หากไม่ได้ login หรือตัวแปร session
ถูกทำลายแล้ว ให้ไปที่หน้า login.php ไม่ได้ใช้ค่าสำหรับ ajax 
มีการเช็คการเข้าใช้งานเพจเฉพาะด้วยตัวแปร session ชื่อ $_SESSION['user_id']
และให้อัพเดทเวลาใช้งาน อัตโนมัติ
สามารถกำหนดได้เป็น
 
1
setSessionTime(600000,"login.php",null,$_SESSION['user_id'],true);
 
ให้ตัวแปร session หมดอายุภายใน 10 นาที 
ใช้ค่าสำหรับ ajax 
สามารถกำหนดได้เป็น
* การใช้งาน ajax ต้องไม่อัพเดทเวลาใช้งานอัตโนมัติ

1
setSessionTime(600000,null,true);

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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>


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







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






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

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

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

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



( หรือ เข้าใช้งานผ่าน Social Login )




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











เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ