เนื้อหาส่วนนี้เป็นการสร้างฟังก์ชั่นประยุกต์เพิ่มเติม เกี่ยวกับการใช้งานตัวแปร
session ปรับปรุงจากเนื้อหาของบทความเก่า
สร้างฟังก์ชัน PHP กำหนดเวลาหมดอายุให้ตัวแปร SESSION อย่างง่าย
https://www.ninenik.com/content.php?arti_id=184 via @ninenik
ฟังก์ชั่นที่ประยุกต์ใหม่เพิ่มเติมนี้ทำอะไรได้บ้าง
- ตรวจสอบสิทธิการใช้งานหน้าเพจเฉพาะ ด้วยตัวแปร 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> |