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