การใช้งาน session และระบบจัดการเนื้อหาของ admin

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

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

ดูแล้ว 19,695 ครั้ง


ในตอนนี้เราจะมาสร้างระบบจัดการเนื้อหา เพื่อต่อยอดจากบทความก่อนหน้า
ที่เราได้ทำรูปแบบเว็บไซต์อย่างง่ายขึ้น มีหน้าแรก เกี่ยวกับเรา บริการของเรา
และ ติดต่อเรา
 
แน่นอนว่า เมื่อเรามีระบบสำหรับจัดการเนื้อหาของเว็บไซต์ โดยจะมี admin เป็นผู้ดูแล
ดังนั้นสิ่งที่จะใช้จำกัดสิทธิ์ของผู้ดูแลระบบ ก็คือระบบการล็อกอิน 
จึงเป็นส่วนเกี่ยวเนื่องที่เราจะใช้งาน session ในการตรวจสอบสิทธิ์การเข้าใช้งานของ
ผู้ดูแลระบบ
 
แม้ว่าเนื้อหาในตอนนี้ จะเกี่ยวข้องกับระบบฐานข้อมูล แต่เราจะยังไม่พูดถึง โดยจะเน้นไปที่การสร้าง
หรือออกแบบการทำงานคร่าวๆ ผ่าน session ก่อนเท่านั้น
 

สร้าง admin controller class สำหรับผู้ดูแลระบบ

 
ให้เราทำการสร้างไฟล์ชื่อ Admin.php ในโฟลเดอร์ apps > controllers โดยกำหนด 
โค้ดดังนี้
 
<?php  
defined('BASEPATH') OR exit('No direct script access allowed');  
  
class Admin extends CI_Controller {  
    
    public function __construct()
    {
            parent::__construct();
            $this->load->library('session');  // เรียกใช้งาน session
    }  
    
    public function index()  
    {  
        // ตรวจสอบตัวแปร session ที่เราจะสร้างและใช้เป็นเงื่อนไข
        if(!isset($_SESSION['ses_admin_id']) || $_SESSION['ses_admin_id']==""){ // ยังไม่ล็อกอิน
            // แสดงหน้าล็อกอินอย่างง่าย 
            $data['title']="Admin Login";  
            $data['title_h1']="Page Admin Login";  
            $this->load->view('admin/admin_header', $data);  
            $this->load->view('admin/admin_login',$data);  
            $this->load->view('admin/admin_footer');  
        }else{
            // แสดงหน้า admin อย่างง่ายเมื่อมีการล็อกอิน และสร้าง session
            $data['title']="Admin Home";  
            $data['title_h1']="Page Admin Home";  
            $this->load->view('admin/admin_header', $data);  
            $this->load->view('admin/admin_home',$data);  
            $this->load->view('admin/admin_footer');  
        }
    }  
    
    // เมื่อทำการล็อกอิน 
    public function login(){
        // สมมติการล็อกอินสร้างตัวแปร session อย่างง่าย
        $_SESSION['ses_admin_id']=1;
        $_SESSION['ses_admin_name']="Admin";
        redirect('admin'); // ไปหน้า admin
    }
    
    // เมื่อทำการล็อกเอาท์
    public function logout(){
        // สมมติล็อกเอาท์ ลบค่า session
        unset($_SESSION['ses_admin_id']);
        unset($_SESSION['ses_admin_name']);
        redirect('admin'); // ไปหน้า admin      
    }
    
}  
 
จากโค้ดข้างต้น จะเห็นว่าเรามีการเรียกใช้งาน session เพื่อใช้ในการกำหนดตัวแปร
สำหรับ admin ด้วยคำสั่ง
 
$this->load->library('session');  // เรียกใช้งาน session
 
และเมื่อเราเรียก URL มาที่หน้า admin ที่ URL
 
http://localhost/learnci/admin
 
เราได้กำหนดเงื่อนไขการแสดง หรือดึง views มาใช้โดยมีเงื่อนไขว่า ถ้ามีตัวแปร session
ที่ระบุว่า admin ได้ทำการล็อกอินแล้ว ให้เรียกไปที่ไฟล์ admin > admin_home.php
 
            // แสดงหน้า admin อย่างง่ายเมื่อมีการล็อกอิน และสร้าง session
            $data['title']="Admin Home";  
            $data['title_h1']="Page Admin Home";  
            $this->load->view('admin/admin_header', $data);  
            $this->load->view('admin/admin_home',$data);  
            $this->load->view('admin/admin_footer');  
 
และกรณีที่ยังไม่ล็อกอิน ซึ่งก็คือยังไม่มีตัวแปร session ตามที่กำหนด ให้ไปที่หน้าล็อกอิน โดย
ได้ทำการไปเรียกไฟล์ views ที่ admin > admin_login.php 
 
            // แสดงหน้าล็อกอินอย่างง่าย 
            $data['title']="Admin Login";  
            $data['title_h1']="Page Admin Login";  
            $this->load->view('admin/admin_header', $data);  
            $this->load->view('admin/admin_login',$data);  
            $this->load->view('admin/admin_footer');  
 
 
ส่วนต่อมา ส่วนของการสมมติการล็อกอิน โดยเรียกใช้ method login()
ซึ่งจะทำงานเมื่อเราทำการกดปุ่ม submit ในหน้าล็อกอิน ในที่นี้ เราจะยังไม่สนใจ
ในส่วนของข้อมูลฟอร์มที่ส่งเข้ามา จะใช้วิธีอย่างง่าย ในการกำหนดตัวแปร session
จากนั้นก็ ลิ้งค์ไปหน้าหลักของ admin เพื่อไปตรวจสอบตัวแปรที่ได้สร้าง เพื่อให้เข้า
เงื่อนไข ไปหน้าหลักของ admin 
 
    // เมื่อทำการล็อกอิน 
    public function login(){
        // สมมติการล็อกอินสร้างตัวแปร session อย่างง่าย
        $_SESSION['ses_admin_id']=1;
        $_SESSION['ses_admin_name']="Admin";
        redirect('admin'); // ไปหน้า admin
    }
 
 
ต่อไปสร้าง method สำหรับการล็อกเอาท์อย่างง่าย โดยให้เรียกใช้ผ่าน method logout()
โดยเมื่อทำการล็อกเอาท์แล้ว ให้เราทำการ ล้างค่า และทำลายตัวแปร session ของ admin
จากนั้นลิ้งค์ไปหน้า admin เพื่อตรวจสอบการล็อกอินใหม่อีกครั้ง
 
    // เมื่อทำการล็อกเอาท์
    public function logout(){
        // สมมติล็อกเอาท์ ลบค่า session
        unset(
            $_SESSION['ses_admin_id'],
            $_SESSION['ses_admin_name']
        );
        redirect('admin'); // ไปหน้า admin      
    }
 
จากโค้ดข้างต้น จะเห็นว่า เราสามารถใช้งาน session ในรูปแบบทั่วไปของ php รวมทั้งฟังก์ชั่น
เกี่ยวกับ session ได้ตามปกติ
 
 

การกำหนดตัวแปร session และเรียกใช้ตัวแปร session ในรุปแบบ codeigniter

 
เรามาดูวิธีการใช้งาน session ในแบบของ codeigniter อย่างง่ายกัน โดยอ้างอิงการใช้งาน
ตามโค้ดด้านบน
 
if(!isset($_SESSION['ses_admin_id']) || $_SESSION['ses_admin_id']==""){ 
 
ตรวจสอบตัวแปร session ว่ามีการกำหนดแล้วหรือไม่
 
isset($_SESSION['ses_admin_id'])
 
ใช้เป็น 
 
$this->session->has_userdata('ses_admin_id')
 
เรียกใช้ อ้างอิง ตัวแปร session
 
$_SESSION['ses_admin_id']
 
ใช้เป็น 
 
$this->session->ses_admin_id
 
หรือจะใช้อีกแบบ โดยใช้ method userdata เป็นแบบนี้ก็ได้
 
$this->session->userdata('ses_admin_id')
 
ดังนั้นเมื่อเราใช้ในรูปแบบ codeigniter จะได้เป็น
 
if(!$this->session->has_userdata('ses_admin_id') || $this->session->ses_admin_id==""){
 
 

การกำหนดค่าตัวแปร session ในรุปแบบ codeigniter

 
รูปแบบทั่วไปที่เราใช้
 
        $_SESSION['ses_admin_id']=1;
        $_SESSION['ses_admin_name']="Admin";
 
จะได้เป็น
 
        $newdata = array(
                'ses_admin_id'  =>1,
                'ses_admin_name' => "Admin"
        );
        $this->session->set_userdata($newdata);       
 
กรณีกำหนดแค่ค่าเดียว หรือแต่ละค่า สามารถทำได้ในรุปแบบดังนี้
 
$this->session->set_userdata('ชื่อตัวแปร', 'ค่าตัวแปร');
// ตัวอย่าง
$this->session->set_userdata('ses_admin_id',1);
$this->session->set_userdata('ses_admin_name','Admin');
 
แบบนี้เป็นต้น
 
 

การล้างค่าและลบตัวแปร session ในรุปแบบ codeigniter

 
รูปแบบทั่วไปที่ใช้
 
        unset(
            $_SESSION['ses_admin_id'],
            $_SESSION['ses_admin_name']
        );
 
จะได้เป็น
 
        $array_items = array(
            'ses_admin_id',
            'ses_admin_name'
        );
        $this->session->unset_userdata($array_items);    
 
กรณีลบแค่ค่าเดียว หรือลบแต่ละค่า สามารถทำได้ในรุปแบบดังนี้
 
        $this->session->unset_userdata('ses_admin_id');
        $this->session->unset_userdata('ses_admin_name');      
 
รายละเอียดเพิ่มเติมสามารถดูได้ที่คู่มือ ในส่วนของ session library
 
 
 

สร้างส่วนของ views แสดงผลหน้าล็อกอิน และหน้าหลักผู้ดูแลระบบ

 
ในที่นี้ จะกำหนดให้ไฟล์ views ทั้งหมดของผู้ดูแลระบบอยู่ในโฟลเดอร์ admin
ดังนั้นให้สร้างโฟลเดอร์ชื่อ admin ไว้ใน apps > views >
จากนั้น ให้สร้างไฟล์ที่เกี่ยวข้องในโฟลเดอร์ admin ดังนี้
 
apps > views > admin >
admin_header.php สำหรับกำหนดรูปแบบเมนูของผู้แลระบบ
admin_home.php สำหรับหน้าหลักเมื่อสมาชิกล็อกอินแล้ว
admin_login.php สำหรับหน้าแบบฟอร์มให้ผู้ดูแลระบบทำการล็อกอิน
admin_footer.php ส่วนท้ายปิดไฟล์
 
โค้ดไฟล์ admin_header.php
 
<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta http-equiv="X-UA-Compatible" content="IE=edge">  
    <meta name="viewport" content="width=device-width, initial-scale=1">      
    <title><?=$title?></title>  
    <link rel="stylesheet" href="<?=base_url('css/bootstrap-3.3.5/css/bootstrap.min.css')?>">  
    <script src="<?=base_url('js/jquery-1.11.3.min.js')?>"></script>      
    <script src="<?=base_url('css/bootstrap-3.3.5/js/bootstrap.min.js')?>"></script>  
</head>  
<body>  
<nav class="navbar navbar-inverse">  
  <div class="container-fluid">  
    <!-- Brand and toggle get grouped for better mobile display -->  
    <div class="navbar-header">  
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">  
        <span class="sr-only">Toggle navigation</span>  
        <span class="icon-bar"></span>  
        <span class="icon-bar"></span>  
        <span class="icon-bar"></span>  
      </button>  
      <a class="navbar-brand" href="<?=base_url('admin')?>">Admin</a>  
    </div>  
  
  
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">  
      <ul class="nav navbar-nav">  
        <li><a href="<?=base_url('admin')?>">Home</a></li>  
        <?php if(isset($_SESSION['ses_admin_id']) && $_SESSION['ses_admin_id']!=""){?>
         <li><a href="<?=base_url('admin/logout')?>">Logout</a></li>  
         <?php } ?>
      </ul>  
      
    </div>  
  </div>  
</nav>   
    
 
สังเกตว่าไฟล์นี้ จะมีการกำหนดลิ้งค์สำหรับล็อกเอาท์ไว้ด้วย โดยลิ้งค์นี้จะแสดงเมื่อทำการล็อกอินเข้ามาแล้ว
 
        <?php if(isset($_SESSION['ses_admin_id']) && $_SESSION['ses_admin_id']!=""){?>
         <li><a href="<?=base_url('admin/logout')?>">Logout</a></li>  
         <?php } ?>
url เต็มคือ

http://localhost/learnci/admin/logout
 
โค้ดไฟล์ admin_login.php
 
<div class="container">
    <br>
    <br>
    <br>
<form action="<?=base_url('admin/login')?>" method="post">
    
    
<div class="bg-warning" style="padding:10px;max-width:400px;margin:auto;">
  <div class="form-group">
    <label for="username">Username</label>
    <input type="text" name="username" class="form-control" placeholder="Username">
  </div>
  <div class="form-group">
    <label for="password">Password</label>
    <input type="password" class="form-control" placeholder="Password">
  </div>
  <button type="submit" name="btn_login" class="btn btn-primary">Login</button>
</div>
        
</form>

</div>
 
เป็นส่วนของรูปแบบหน้าล็อกอินอย่างง่าย สังเกตว่า ในส่วนของฟอร์ม จะ action ไปที่ method login
 
<form action="<?=base_url('admin/login')?>" method="post">
 
ผ่าน URL เต็มคือ 
 
http://localhost/learnci/admin/login
 
 
โค้ดไฟล์ admin_home.php
 
<div class="container">
    
<strong>AdminID:</strong>  <?=$_SESSION['ses_admin_id']?> <br>
<strong>Admin Name:</strong> <?=$_SESSION['ses_admin_name']?> <br>


</div>
 
 
โค้ดหน้านี้ไม่มีอะไร เป็นการแสดงข้อมูลตัวแปร session เพื่อแสดงให้เห็นว่า เรามีการ
ใช้งานตัวแปร session ถูกต้องแล้ว
 
โค้ดไฟล์ admin_footer.php
 
</body>
</html>
 
 
การใช้งาน session ใน codeigniter ก็จะประมาณนี้ สามารถใช้โค้ดการใช้งานแบบ php ทั่วไปได้
 


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



อ่านต่อที่บทความ













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





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


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







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