วิธีการตั้งค่าเซสชันใน Codeตัวจุดไฟ พร้อมตัวอย่าง
Codeการจัดการเซสชัน Igniter
หากคุณเคยพัฒนาแอปพลิเคชันบนเดสก์ท็อปมาก่อน คุณอาจทราบว่าคุณสามารถกำหนดตัวแปรส่วนกลางโดยกำหนดค่าให้กับตัวแปรนั้นและใช้งานได้ตลอดวงจรชีวิตของแอปพลิเคชันที่เปิดและปิดมากกว่าหนึ่ง (1) และแต่ละคำขอจะสามารถเข้าถึง ตัวแปรทั่วโลก
กล่าวอีกนัยหนึ่ง สถานะของแอปพลิเคชันจะยังคงอยู่ กล่าวคือหากเมื่อคุณเข้าสู่ระบบ คุณตั้งชื่อบริษัทให้เป็นตัวแปรส่วนกลาง แม้ว่าคุณจะปิดแบบฟอร์มการเข้าสู่ระบบแล้วก็ตาม สถานะของชื่อบริษัทก็จะยังคงอยู่
HTTP ทำงานแตกต่างไปเล็กน้อยจากสถานการณ์ข้างต้นที่เราเพิ่งอธิบายไป มันไร้สัญชาติ นั่นคือการบอกว่าสิ่งที่คุณทำในคำขอหนึ่งจะไม่คงอยู่ต่อไปในคำขอถัดไป ต
หรือแก้ไขปัญหานี้ เรามีโซลูชันสอง (2) รายการใน PHP เราสามารถทำงานกับคุกกี้ซึ่งเป็นไฟล์ขนาดเล็กที่วางอยู่บนคอมพิวเตอร์ของผู้ใช้หรือทำงานกับเซสชันที่คล้ายกับคุกกี้ แต่ถูกเก็บไว้บนเซิร์ฟเวอร์แทนและมีความจุมากกว่าคุกกี้
ควรใช้เซสชันเมื่อใด?
เซสชันมักมีประโยชน์เมื่อคุณต้องการทราบกิจกรรมของผู้ใช้จากหน้าหนึ่งไปยังอีกหน้าหนึ่ง ตัวอย่างเช่น สมมติว่าคุณมีพื้นที่ที่ได้รับการป้องกันบนเว็บไซต์ ผู้ใช้ไม่จำเป็นต้องเข้าสู่ระบบในทุกหน้า คุณสามารถให้ผู้ใช้เข้าสู่ระบบเพียงครั้งเดียวและจัดเก็บรายละเอียดของพวกเขาไว้ในตัวแปรเซสชัน จากนั้นนำข้อมูลเดียวกันนั้นกลับมาใช้ใหม่ในการร้องขอครั้งต่อไป กรณีการใช้งานอื่นๆ ได้แก่ การทำงานกับร้านค้าออนไลน์ping ระบบนี้ทำงานและผู้ใช้ต้องเพิ่มสินค้าลงในร้านค้าping เกวียน
ติดต่อเราโดยตรง CodeIgniter ยังใช้เซสชันเพื่อทำให้ข้อมูลพร้อมใช้งานเพียงครั้งเดียวในการร้องขอครั้งถัดไป ซึ่งมีประโยชน์หากคุณอาจแก้ไขและอัปเดตระเบียนในฐานข้อมูล และคุณต้องการส่งข้อมูลตอบกลับไปยังผู้ใช้เมื่อพวกเขาถูกเปลี่ยนเส้นทางไปยังหน้าอื่น
การส่งข้อความ Flash ไปยังหน้าอื่นด้วย CI Sessions
ในส่วนนี้ คุณจะได้เรียนรู้เกี่ยวกับการส่งข้อความแฟลชไปยังหน้าอื่นๆ โดยใช้ไลบรารีเซสชัน Codeเครื่องทำให้ลุกไหม้
สร้างไฟล์ใหม่ SessionController ใน
application/controllers/SessionController.php
เพิ่มโค้ดดังต่อไปนี้:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class SessionController extends CI_Controller {
public function __construct() {
parent:: __construct();
$this->load->helper('url');
$this->load->library('session');
}
public function index() {
$this->load->view('sessions/index');
}
public function flash_message(){
$this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages');
redirect(base_url('flash_index'));
}
}
ที่นี่
- คลาส SessionController ขยาย CI_Controller {…} กำหนดคลาส SessionController และขยายคลาสคอนโทรลเลอร์หลัก
- ฟังก์ชั่นสาธารณะ __construct() {…} กำหนดวิธีคอนสตรัคเตอร์ที่เริ่มต้นคลาสพาเรนต์ และโหลดตัวช่วย url และไลบรารีเซสชัน
- ฟังก์ชั่นสาธารณะ index() {…} กำหนดวิธีดัชนีเซสชั่นที่โหลดมุมมองดัชนีเซสชั่น
- ฟังก์ชั่นสาธารณะ flash_message(){…} กำหนดวิธีข้อความแฟลชซึ่งตั้งค่าข้อมูลแฟลชจากนั้นเปลี่ยนเส้นทางไปยังเส้นทาง flash_index
ตอนนี้เรามาสร้างมุมมองที่จะแสดงค่าของข้อมูลเซสชันกันดีกว่า
สร้างเซสชันไดเรกทอรีใหม่ในแอปพลิเคชัน/มุมมอง
สร้างไฟล์ใหม่index.phpใน application/views/sessions
เพิ่มโค้ดดังต่อไปนี้:
<html>
<head>
<title>Code Igniter Flash Session</title>
</head>
<body>
<p>The session value of msg is <b> <?=$this->session->userdata('msg');?> </b></p>
</body>
</html>
ที่นี่
session->userdata('msg');?> ดึงค่าของข้อมูลเซสชันด้วยคีย์ msg และแสดงในเบราว์เซอร์
ตอนนี้เรามาสร้างเส้นทางสำหรับวิธีเซสชันแฟลชของเรากันดีกว่า
เปิด application/config/routes.php
เพิ่มบรรทัดต่อไปนี้
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
ตอนนี้เรามาเริ่มเซิร์ฟเวอร์ในตัวกันดีกว่า PHP และทดสอบข้อความแฟลชของเรา
เปิดเทอร์มินัล
เรียกใช้คำสั่งต่อไปนี้
cd C:\Sites\ci-app php -S localhost:3000
ที่นี่
คำสั่งดังกล่าวเรียกดูไดเรกทอรีรหัสแอปพลิเคชันและเริ่มเซิร์ฟเวอร์ในตัวบนพอร์ต 3000
หมายเหตุ: เส้นทางของแอปพลิเคชันต้องตรงกับเส้นทางที่คุณดาวน์โหลดไฟล์มา Codeคุณสามารถใช้ Igniter และหมายเลขพอร์ตใดก็ได้ที่ว่างอยู่บนคอมพิวเตอร์ของคุณ ไม่จำเป็นต้องใช้พอร์ต 3000
โหลดข้อมูลต่อไปนี้ URL ในเว็บเบราว์เซอร์ของคุณ: http://localhost:3000/flash_message
คุณจะถูกนำไปยังหน้าต่อไปนี้ URLและคุณจะได้รับผลลัพธ์ดังต่อไปนี้: http://localhost:3000/flash_index
คลิกที่ปุ่มรีเฟรชของเว็บเบราว์เซอร์ของคุณหรือกด F5
ตอนนี้คุณจะได้รับผลลัพธ์ต่อไปนี้
การจัดเก็บข้อมูลผู้ใช้ในเซสชัน CI
ตอนนี้เรามาดูตัวอย่างขั้นสูงกว่านี้เล็กน้อย เพื่อให้ง่าย เราจะจำลองการรับรองความถูกต้องของผู้ใช้ และไม่ดำเนินการตรวจสอบบันทึกผู้ใช้ในฐานข้อมูลและรหัสผ่านที่ส่งมาจริง
เริ่มจากเส้นทางกันก่อน
เปิด Routes.php ที่อยู่ใน application/config
เพิ่มเส้นทางต่อไปนี้
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
ที่นี่
- $route['login'] = 'sessioncontroller/login'; กำหนดเส้นทางที่แสดงแบบฟอร์มเข้าสู่ระบบ
- $route['authenticate'] = 'sessioncontroller/authenticate'; กำหนดเส้นทางที่จำลองการเข้าสู่ระบบของผู้ใช้ที่สำเร็จและตั้งค่าข้อมูลการเข้าสู่ระบบเซสชัน
- $route['settings'] = 'sessioncontroller/settings'; กำหนดหน้าป้องกันที่ควรสามารถเข้าถึงได้โดยผู้ใช้ที่เข้าสู่ระบบเท่านั้น
- $route['dashboard'] = 'sessioncontroller/dashboard'; กำหนดหน้าป้องกันที่ควรสามารถเข้าถึงได้โดยผู้ใช้ที่เข้าสู่ระบบเท่านั้น
- $route['logout'] = 'sessioncontroller/logout'; ออกจากระบบผู้ใช้โดยการทำลายข้อมูลเซสชัน
ตอนนี้เรามาอัปเดต SessionController กันดีกว่า
เปิดแอปพลิเคชัน/ตัวควบคุม/SessionController.php
เพิ่มวิธีการดังต่อไปนี้:
public function check_auth($page) {
if (!$this->session->userdata('logged_in')) {
$this->session->set_flashdata('msg', "You need to be logged in to access the $page page.");
redirect('login');
}
}
public function login() {
$this->load->view('sessions/login');
}
public function authenticate() {
$this->session->set_userdata('username', 'John Doe');
$this->session->set_userdata('logged_in', TRUE);
redirect(base_url('dashboard'));
}
public function dashboard() {
$this->check_auth('dashboard');
$this->load->view('sessions/dashboard');
}
public function settings() {
$this->check_auth('settings');
$this->load->view('sessions/settings');
}
public function logout() {
$this->session->unset_userdata('username');
$this->session->unset_userdata('logged_in');
redirect(base_url('login'));
}
ที่นี่
- public function check_auth($page) {…} กำหนดวิธีการตรวจสอบว่าผู้ใช้เข้าสู่ระบบหรือไม่ จากนั้นจึงอนุญาตให้เข้าถึงเพจได้ หากผู้ใช้ไม่ได้เข้าสู่ระบบ ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบพร้อมข้อความแฟลช
- ฟังก์ชั่นสาธารณะเข้าสู่ระบบ () {…} โหลดมุมมองการเข้าสู่ระบบที่อยู่ในไดเรกทอรีเซสชัน
- ฟังก์ชันสาธารณะ authenticate() {…} ตั้งค่าข้อมูลผู้ใช้เซสชันสำหรับคีย์ logged_in และ username หมายเหตุ: เราไม่ได้ตรวจสอบรายละเอียดการเข้าสู่ระบบกับฐานข้อมูล เราเพียงแค่ถือว่ารายละเอียดที่ส่งมานั้นถูกต้อง และตั้งค่าข้อมูลเซสชัน
- ฟังก์ชั่นสาธารณะแดชบอร์ด() {…} โหลดหน้าแดชบอร์ดหลังจากเรียก $this->check_auth('dashboard'); ซึ่งตรวจสอบว่ามีการตั้งค่าคีย์เซสชัน logged_in
- public function settings() {…} โหลดหน้าการตั้งค่าซึ่งได้รับการป้องกันด้วย
- public function logout() {…} ทำลายข้อมูลเซสชันและออกจากระบบผู้ใช้ วิธีการนี้จะเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบด้วย
Codeมุมมองของเซสชัน Igniter
สร้างมุมมองต่อไปนี้ในแอปพลิเคชัน/มุมมอง/เซสชัน
- Dashboard.php
- login.php
- settings.php
เพิ่มโค้ดต่อไปนี้ลงในไฟล์ Dashboard.php
<!DOCTYPE html>
<html>
<head>
<title>Dashboard</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
</head>
<body>
<div class="container">
<div class="column">
<nav class="navbar" role="navigation" aria-label="main navigation">
<div id="navbarBasicExample" class="navbar-menu">
<div class="navbar-start">
<a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a>
<a href="<?= site_url('settings')?>" class="navbar-item">Settings</a>
</div>
<div class="navbar-end">
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link"><?=$this->session->userdata('username');?></a>
<div class="navbar-dropdown">
<a class="navbar-item">My Profile</a>
<hr class="navbar-divider">
<a class="navbar-item">Sign out</a>
</div>
</div>
</div>
</div>
</nav>
<h3>Welcome Page</h3>
</div>
</div>
</body>
</html>
ที่นี่
session->userdata('username');?> แสดงชื่อผู้ใช้ที่เราตั้งไว้ในวิธีการตรวจสอบความถูกต้อง
เพิ่มโค้ดต่อไปนี้ลงในไฟล์ login.php
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
</head>
<body>
<div class="container">
<div class="column">
<p><?=$this->session->userdata('msg');?></p>
<form method="post" action="<?= site_url('authenticate')?>">
<div class="field">
<label class="label">Username</label>
<div class="control">
<input class="input" type="text" placeholder="Text input">
</div>
</div>
<div class="field">
<label class="label">Password</label>
<div class="control">
<input class="input" type="passport" placeholder="Text input">
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-success">Login</button>
</div>
</div>
</form>
</div>
</div>
</body>
</html>
ที่นี่
แบบฟอร์มเข้าสู่ระบบจะส่งเพื่อตรวจสอบเส้นทาง
เพิ่มโค้ดต่อไปนี้ลงในไฟล์ settings.php
<!DOCTYPE html>
<html>
<head>
<title>Settings</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
</head>
<body>
<div class="container">
<div class="column">
<nav class="navbar" role="navigation" aria-label="main navigation">
<div id="navbarBasicExample" class="navbar-menu">
<div class="navbar-start">
<a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a>
<a href="<?= site_url('settings')?>" class="navbar-item">Settings</a>
</div>
<div class="navbar-end">
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Jim Jones</a>
<div class="navbar-dropdown">
<a href="#" class="navbar-item">My Profile</a>
<hr class="navbar-divider">
<a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a>
</div>
</div>
</div>
</div>
</nav>
<h3>Settings Page</h3>
</div>
</div>
</body>
</html>
แค่นั้นแหละสำหรับมุมมองของเรา ตอนนี้เรามาทดสอบแอปพลิเคชันของเรากัน
ในบทช่วยสอนนี้ เราใช้เว็บเซิร์ฟเวอร์ PHP ในตัว แต่คุณสามารถใช้เว็บเซิร์ฟเวอร์ใดก็ได้ที่รองรับ PHP
เปิดเทอร์มินัล
เรียกใช้คำสั่งต่อไปนี้
cd C:\Sites\ci-app php -S localhost:3000
ที่นี่
คำสั่งดังกล่าวเรียกดูไดเรกทอรีรหัสแอปพลิเคชันและเริ่มเซิร์ฟเวอร์ในตัวบนพอร์ต 3000
หมายเหตุ: เส้นทางของแอปพลิเคชันต้องตรงกับเส้นทางที่คุณดาวน์โหลดไฟล์มา Codeคุณสามารถใช้ Igniter และหมายเลขพอร์ตใดก็ได้ที่ว่างอยู่บนคอมพิวเตอร์ของคุณ ไม่จำเป็นต้องใช้พอร์ต 3000
เปิดรายการต่อไปนี้ URL ในเว็บเบราว์เซอร์ของคุณ: http://localhost:3000/dashboard
คุณจะถูกส่งต่อไปยังหน้าต่อไป
คลิกที่ปุ่มเข้าสู่ระบบ
คุณจะเห็นผลลัพธ์ดังต่อไปนี้
หลังจากที่เราเข้าสู่ระบบแล้ว เราก็สามารถดูข้อมูลเซสชันได้แล้ว
สรุป
ในบทเรียนนี้ คุณได้เรียนรู้พื้นฐานของ Codeฉันได้เรียนรู้เกี่ยวกับไลบรารีเซสชันของ Igniter และวิธีการใช้งานเพื่อจัดเก็บข้อมูลชั่วคราวในรูปแบบข้อความแฟลช และวิธีการจัดเก็บข้อมูลถาวร เช่น ข้อมูลการเข้าสู่ระบบของผู้ใช้




