PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

การใช้งานตัวแปร cookie ด้วย cookie helper ใน codeigniter

08 September 2015 By


สำหรับเนื้อหาที่จะนำมาใช้ประยุกต์ หรือนำเสนอเกี่ยวกับการใช้งานตัวแปร cookie
ก็จะเป็นเนื้อหาส่วนต้นๆ ของ codeigniter ตามลิ้งค์ด้านล่าง
 
การใช้งาน session และระบบจัดการเนื้อหาของ admin 
http://www.ninenik.com/content.php?arti_id=664 via @ninenik
 
รูปแบบก็คือเรามีฟอร์มสำหรับทำการล็อกอินเข้าสู่ระบบ แบบสมมติการกำหนด session
และเมื่อกดปุ่มล็อกอินก็จะสร้าง session ขึ้นมาแล้วเปลี่ยนไปหน้าหลัก การจัดการของ admin
แต่ส่วนที่เราจะพูดถึงคือไฟล์ views ชื่อ admin_login.php ในโฟลเดอร์ apps > views > admin
กับอีกไฟล์ที่เราจะพูดถึงคือไฟล์ controller ชื่อ Admin.php ในโฟลเดอร์ apps > controllers
 
 

การใช้งานตัวแปร cookie ด้วย cookie helper

 
สำหรับการใช้งาน cookie ที่เราจะศึกษานี้คือ ในฟอร์มของหน้าล็อกอิน เมื่อเราคลิกเลือก checkbox 
เพื่อกำหนดให้จำ username และ password และเมื่อกด submit ก็จะทำการเก็บค่าตัวแปร cookie
หลังจากนั้น เมื่อ admin ทำการล็อกเอาท์ออกมา หน้าฟอร์มสำหรับล็อกอินก็จะแสดงข้อมูลที่
ได้ทำการจำค่านั้นๆ เอาไว้ได้
 
ก่อนอื่นไปที่ไฟล์ Admin.php ในโฟลเดอร์ apps > controllers
ให้เราโหลด cookie helper มาไว้ในฟังก์ชั่น __contruct() ดังนี้
 
    public function __construct()
    {
            parent::__construct();
            $this->load->helper('cookie');
    }  
 
 
จากนั้นเรามาดูที่ ไฟล์ admin_login.php เดิมของเรา ในโฟลเดอร์ apps > views > admin
 
<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>
 
ฟอร์มล็อกอินข้างต้น จะยังไม่มี checkbox และการนำค่าตัวแปร cookie มาใช้
ให้เราปรับเพิ่มใหม่เป็นดังนี้
 
<div class="container">
    <br>
    <br>
    <br>
<form action="<?=base_url('admin/login')?>" method="post">
<?php
    $ck_username=get_cookie('ck_username');    
    $ck_password=get_cookie('ck_password');
    $ck_remember=get_cookie('ck_remember');
// หรือถ้าเรียกใช้งานแบบทั่วไปก็จะประมาณนี้
//    $ck_username=(isset($_COOKIE['ck_username']))?$_COOKIE['ck_username']:null;
//    $ck_password=(isset($_COOKIE['ck_password']))?$_COOKIE['ck_password']:null;
//    $ck_remember=(isset($_COOKIE['ck_remember']))?$_COOKIE['ck_remember']:null;
?>    
<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"  value="<?=$ck_username?>">
  </div>
  <div class="form-group">
    <label for="password">Password</label>
    <input type="password" name="password" class="form-control" placeholder="Password" value="<?=$ck_password?>">
  </div>
  <div class="checkbox">
    <label>
      <input type="checkbox" name="remember_check" <?=(isset($ck_remember))?" checked":""?> > Remember?
    </label>
  </div>  
  <button type="submit" name="btn_login" class="btn btn-primary">Login</button>
</div>
        
</form>

</div>
 
 
จากโค้ดด้านบนส่วนแรกที่พูดถึงคือ
 
<?php
    $ck_username=get_cookie('ck_username');    
    $ck_password=get_cookie('ck_password');
    $ck_remember=get_cookie('ck_remember');
// หรือถ้าเรียกใช้งานแบบทั่วไปก็จะประมาณนี้
//    $ck_username=(isset($_COOKIE['ck_username']))?$_COOKIE['ck_username']:null;
//    $ck_password=(isset($_COOKIE['ck_password']))?$_COOKIE['ck_password']:null;
//    $ck_remember=(isset($_COOKIE['ck_remember']))?$_COOKIE['ck_remember']:null;
?>  
 
เป้นการเอาค่าตัวแปร cookie มาเก็บไว้ในตัวแปรด้านซ้าย ไว้ใช้งานในหน้านั้นๆ 
หรือจากโค้ด เราสามารถเรียกใช้งานในรูปแบบเก่าได้
 
ส่วนต่อมาคือส่วนของการนำค่ามาแสดงใน input text กับ password และ checkbox 
 
<input type="text" name="username" class="form-control" placeholder="Username"  value="<?=$ck_username?>">
<input type="password" name="password" class="form-control" placeholder="Password" value="<?=$ck_password?>">
<input type="checkbox" name="remember_check" <?=(isset($ck_remember))?" checked":""?> >
 
จากโค้ดอธิบายง่ายๆก็คือ เมื่อมีค่าตัวแปร cookie ก็ให้เอามาเป็นเงื่อนไขในการแสดง หรือการกำหนด checkbox
 
 
กลับมาที่ไฟล์ Admin.php 
เราจะมาตรวจสอบและกำหนดตัวแปร cookie ในส่วนของฟังก์ชั่น login()
ขอรวบรัดยกโค้ดในส่วนของฟังก์ชั่น login() ที่กำหนดเรียบร้อยแล้วมาอธิบาย
 
    // เมื่อทำการล็อกอิน 
    public function login(){
        
        $username=$this->input->post('username');
        $password=$this->input->post('password');
        $remember_check=$this->input->post('remember_check');
        if(isset($remember_check)){
            set_cookie('ck_username',$username,time()+60);
            set_cookie('ck_password',$password,time()+60);
            set_cookie('ck_remember',$remember_check,time()+60);
        }else{
            delete_cookie('ck_username');
            delete_cookie('ck_password');
            delete_cookie('ck_remember');
        }

        // สมมติการล็อกอินสร้างตัวแปร session อย่างง่าย
//        $_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);        
        redirect('admin'); // ไปหน้า admin
    }
 
 
จากโค้ด สามบรรทัดตามนี้จะเป็นการไปดึงค่าฟอร์มจากตัวแปร $_POST ที่ส่งมา
มาเก็บไว้ในตัวแปรด้านซ้ายมือ
 
        $username=$this->input->post('username');
        $password=$this->input->post('password');
        $remember_check=$this->input->post('remember_check');
 
จากนั้นทำการตรวจสอบว่า checkbox มีการกดเลือกเพื่อจำ username และ รหัสผ่านหรือไม่
ถ้ามีการกดเลือก ก็ให้ทำการกำหนดตัวแปร cookie รับค่าจากฟอร์ม และกำหนดอายุหมดภายใน 60 วินาที
(* 60 วินาทีตามตัวอยางแค่สำหรับทดสอบ ตามจริงควรปรับตามความเหมาะสม เช่นถ้าเป็น 1 ชม. ก็เป็น
3600 หรือมาจาก 60x60 เป็นตัน) 
และถ้าหากไม่ได้มีการกำหนดให้ จำค่า username และ paasword แล้ว ให้ทำการลบตัวแปร
cookie ด้วยคำส่ัง
 
delete_cookie();
 
จะได้โค้ดในส่วนตรวจสอบการสร้างและลบตัวแปร cookie ดังนี้
 
        if(isset($remember_check)){
            set_cookie('ck_username',$username,time()+60);
            set_cookie('ck_password',$password,time()+60);
            set_cookie('ck_remember',$remember_check,time()+60);
        }else{
            delete_cookie('ck_username');
            delete_cookie('ck_password');
            delete_cookie('ck_remember');
        }
 

โค้ดไฟล์ 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->helper('cookie');
//            $this->load->library('session');  // เรียกใช้งาน session
    }  
    
    public function index($admin_pages="home",$action=null,$id=null)  
    {  
        // ตรวจสอบตัวแปร session ที่เราจะสร้างและใช้เป็นเงื่อนไข
        if(!isset($_SESSION['ses_admin_id']) || $_SESSION['ses_admin_id']==""){ // ยังไม่ล็อกอิน
//        if(!$this->session->has_userdata('ses_admin_id') || $this->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";  
            $data['action']=$action;
            $data['id']=$id;
            $file_model=APPPATH.'/models/admin/'.ucfirst($admin_pages).'_model.php';  
            if(file_exists($file_model))  
            {  
                $this->load->model('admin/'.$admin_pages.'_model');  
            }               
            $this->load->view('admin/admin_header', $data);  
            $this->load->view('admin/admin_'.$admin_pages,$data);  
            $this->load->view('admin/admin_footer');  
        }
    }  
    
    // เมื่อทำการล็อกอิน 
    public function login(){
        
        $username=$this->input->post('username');
        $password=$this->input->post('password');
        $remember_check=$this->input->post('remember_check');
        if(isset($remember_check)){
            set_cookie('ck_username',$username,time()+60);
            set_cookie('ck_password',$password,time()+60);
            set_cookie('ck_remember',$remember_check,time()+60);
        }else{
            delete_cookie('ck_username');
            delete_cookie('ck_password');
            delete_cookie('ck_remember');
        }

        // สมมติการล็อกอินสร้างตัวแปร session อย่างง่าย
//        $_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);        
        redirect('admin'); // ไปหน้า admin
    }
    
    // เมื่อทำการล็อกเอาท์
    public function logout(){
        // สมมติล็อกเอาท์ ลบค่า session
//        unset(
//            $_SESSION['ses_admin_id'],
//            $_SESSION['ses_admin_name']
//        );
        $array_items = array(
            'ses_admin_id',
            'ses_admin_name'
        );
        $this->session->unset_userdata($array_items);        
        redirect('admin'); // ไปหน้า admin      
    }
    
}  
 
 
จะเห็นว่าการใช้งานตัวแปร cookie ข้างต้น ไม่ต่างจากการกำหนดและใช้งานด้วย php 
แบบปกติทั่วไป แต่อย่างไรก็ตาม การใช้งานในรุปแบบ codeigniter ก็ค่อนข้างสะดวกและ
ทำให้การเขียนโค้ดเป็นไปในรูปแบบเดียวกันมากที่สุด

Tags:: codeigniter cookie

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

กรุณาล็อกอิน และลงชื่อติดตาม


สมัครสมาชิกได้ที่        ล็อกอินได้ที่   





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