เนื้อหาส่วนนี้เป็นการสร้างฟังก์ชั่นประยุกต์เพิ่มเติม เกี่ยวกับการใช้งานตัวแปร
session ปรับปรุงจากเนื้อหาของบทความเก่า
สร้างฟังก์ชัน PHP กำหนดเวลาหมดอายุให้ตัวแปร SESSION อย่างง่าย
https://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>