Cách đặt phiên trong Codeigniter bằng ví dụ

Quản lý phiên CodeIgniter

Nếu trước đó bạn đã phát triển các ứng dụng dành cho máy tính để bàn, bạn có thể biết rằng bạn có thể xác định một biến toàn cục, gán một giá trị cho nó và sử dụng nó trong suốt vòng đời của việc mở và đóng ứng dụng nhiều hơn một (1) và mỗi yêu cầu sẽ có quyền truy cập vào biến toàn cục.

Nói cách khác, trạng thái của ứng dụng được duy trì. Điều đó có nghĩa là nếu khi đăng nhập, bạn đặt tên công ty thành một biến toàn cục thì ngay cả sau khi bạn đóng biểu mẫu đăng nhập, trạng thái của tên công ty vẫn được giữ nguyên.

HTTP hoạt động hơi khác so với kịch bản chúng tôi vừa mô tả ở trên. Nó là không quốc tịch. Nghĩa là bất cứ điều gì bạn làm trong một yêu cầu đều không kiên trì trong yêu cầu tiếp theo. T

o giải quyết vấn đề này. Chúng tôi có hai (2) giải pháp trong PHP. Chúng tôi có thể làm việc với cookie là các tệp nhỏ được đặt trên máy tính của người dùng hoặc làm việc với các phiên tương tự như cookie nhưng thay vào đó được lưu trữ trên máy chủ và có dung lượng lớn hơn cookie.

Khi nào nên sử dụng phiên?

Phiên thường hữu ích khi bạn muốn biết hoạt động của người dùng từ trang này sang trang khác. Ví dụ, giả sử bạn có một khu vực được bảo vệ trên trang web. Người dùng không cần phải đăng nhập vào từng trang. Bạn có thể cho phép người dùng đăng nhập một lần và lưu trữ thông tin chi tiết của họ trong một biến phiên sau đó sử dụng lại cùng dữ liệu đó cho các yêu cầu tiếp theo. Các trường hợp sử dụng khác bao gồm khi làm việc trên hệ thống mua sắm và người dùng phải thêm các mặt hàng vào giỏ hàng.

Ngoài ra, CodeIgniter cũng sử dụng các phiên để cung cấp dữ liệu chỉ một lần cho yêu cầu tiếp theo. Điều này rất hữu ích khi bạn có thể chỉnh sửa và cập nhật bản ghi cơ sở dữ liệu và bạn muốn trả lại một số phản hồi cho người dùng khi họ được chuyển hướng đến một trang khác.

Gửi tin nhắn Flash đến các trang khác bằng Phiên CI

Trong phần này, bạn sẽ tìm hiểu về cách gửi tin nhắn flash đến các trang khác bằng thư viện phiên trong CodeIgniter

Tạo một tệp mới SessionController trong

application/controllers/SessionController.php

Thêm mã sau đây

<?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'));
    }
}

ĐÂY,

  • class SessionController mở rộng CI_Controller {…} định nghĩa lớp SessionController và mở rộng lớp trình điều khiển chính.
  • public function __construct() {…} xác định phương thức khởi tạo để khởi tạo lớp cha và tải trình trợ giúp url và thư viện phiên.
  • public function index() {…} xác định phương thức chỉ mục phiên tải chế độ xem chỉ mục phiên.
  • public function flash_message(){…} xác định phương thức tin nhắn flash đặt dữ liệu flash sau đó chuyển hướng đến tuyến flash_index

Bây giờ hãy tạo chế độ xem sẽ hiển thị giá trị của dữ liệu phiên.

Tạo một phiên thư mục mới trong ứng dụng/lượt xem

Tạo một tệp mới index.php trong ứng dụng/lượt xem/phiên

Thêm mã sau đây

<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>

ĐÂY,

session->userdata('msg');?> truy xuất giá trị của dữ liệu phiên bằng khóa msg và hiển thị nó trong trình duyệt.

Bây giờ hãy tạo các tuyến đường cho phương thức flash phiên của chúng ta

Mở ứng dụng/config/routes.php

Thêm các dòng sau

$route['flash_index'] = 'session controller';
$route['flash_message'] = 'session controller/flash_message';

Bây giờ chúng ta hãy khởi động máy chủ tích hợp cho PHP và kiểm tra tin nhắn flash của chúng tôi

Mở thiết bị đầu cuối

Chạy lệnh sau

cd C:\Sites\ci-app
php -S localhost:3000

ĐÂY,

Lệnh trên duyệt đến thư mục mã ứng dụng và khởi động máy chủ tích hợp trên cổng 3000.

Lưu ý: đường dẫn ứng dụng phải khớp với đường dẫn mà bạn đã tải xuống CodeIgniter và bạn có thể sử dụng bất kỳ số cổng nào miễn phí trên máy tính của mình. Không cần thiết phải sử dụng cổng 3000.

Tải URL sau vào trình duyệt web của bạn: http://localhost:3000/flash_message

Bạn sẽ được chuyển hướng đến URL sau và bạn sẽ nhận được kết quả sau: http://localhost:3000/flash_index

Gửi tin nhắn Flash đến các trang khác

Nhấp vào nút làm mới của trình duyệt web của bạn hoặc nhấn F5

Bây giờ bạn sẽ nhận được kết quả sau

Gửi tin nhắn Flash đến các trang khác

Lưu trữ dữ liệu người dùng trong phiên CI

Bây giờ chúng ta hãy xem một ví dụ nâng cao hơn một chút. Để đơn giản, chúng tôi sẽ mô phỏng xác thực người dùng và không thực hiện việc xác minh hồ sơ người dùng trong cơ sở dữ liệu và mật khẩu đã gửi trên thực tế.

Hãy bắt đầu với các tuyến đường

Mở Routes.php nằm trong ứng dụng/config

Thêm các tuyến đường sau

$route['login'] = 'sessioncontroller/login';
$route['authenticate'] = 'sessioncontroller/authenticate';
$route['settings'] = 'sessioncontroller/settings';
$route['dashboard'] = 'sessioncontroller/dashboard';
$route['logout'] = 'sessioncontroller/logout';

ĐÂY,

  • $route['login'] = 'sessioncontroller/đăng nhập'; xác định tuyến đường hiển thị biểu mẫu đăng nhập
  • $route['authenticate'] = 'bộ điều khiển phiên/xác thực'; xác định lộ trình mô phỏng đăng nhập thành công của người dùng và đặt dữ liệu đăng nhập phiên.
  • $route['settings'] = 'bộ điều khiển phiên/cài đặt'; xác định một trang được bảo vệ chỉ có thể truy cập được đối với người dùng đã đăng nhập
  • $route['dashboard'] = 'sessioncontroller/dashboard'; xác định một trang được bảo vệ mà chỉ người dùng đã đăng nhập mới có thể truy cập được.
  • $route['logout'] = 'sessioncontroller/logout'; đăng xuất người dùng bằng cách hủy dữ liệu phiên

Bây giờ hãy cập nhật SessionController

Mở ứng dụng/bộ điều khiển/SessionController.php

Thêm các phương pháp sau

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'));
    }

ĐÂY,

  • public function check_auth($page) {…} xác định phương thức kiểm tra xem người dùng đã đăng nhập chưa rồi cho phép truy cập vào trang. Nếu người dùng chưa đăng nhập thì người dùng sẽ được chuyển hướng đến trang đăng nhập bằng một tin nhắn flash.
  • public function login() {…} tải chế độ xem đăng nhập nằm trong thư mục phiên.
  • public function authenticate() {…} thiết lập dữ liệu người dùng phiên cho các khóa logged_in và username. LƯU Ý: Chúng tôi không xác minh bất kỳ thông tin đăng nhập nào với cơ sở dữ liệu. Chúng tôi chỉ giả định rằng các thông tin đã gửi là ổn và thiết lập dữ liệu phiên.
  • public function Dashboard() {…} tải trang tổng quan sau khi gọi $this->check_auth('dashboard'); xác minh rằng khóa phiên log_in đã được đặt.
  • public function settings() {…} tải trang cài đặt cũng được bảo vệ
  • public function logout() {…} hủy dữ liệu phiên và đăng xuất người dùng. Phương thức này cũng chuyển hướng đến trang đăng nhập

Lượt xem phiên CodeIgniter

Tạo các chế độ xem sau trong application/views/sessions

  • bảng điều khiển.php
  • đăng nhập.php
  • cài đặt.php

Thêm mã sau vào 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>

ĐÂY,

session->userdata('username');?> hiển thị tên người dùng mà chúng tôi đã đặt trong phương thức xác thực

Thêm mã sau vào 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>

ĐÂY,

Mẫu đăng nhập gửi để xác thực tuyến đường.

Thêm mã sau vào 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>

Đó là quan điểm của chúng tôi. Bây giờ hãy thử nghiệm ứng dụng của chúng tôi.

Trong hướng dẫn này, chúng tôi đang sử dụng máy chủ web PHP tích hợp, nhưng bạn có thể sử dụng bất kỳ máy chủ web nào hỗ trợ PHP.

Mở thiết bị đầu cuối

Chạy lệnh sau

cd C:\Sites\ci-app
php -S localhost:3000

ĐÂY,

Lệnh trên duyệt đến thư mục mã ứng dụng và khởi động máy chủ tích hợp trên cổng 3000.

Lưu ý: đường dẫn ứng dụng phải khớp với đường dẫn mà bạn đã tải xuống CodeIgniter và bạn có thể sử dụng bất kỳ số cổng nào miễn phí trên máy tính của mình. Không cần thiết phải sử dụng cổng 3000.

Mở URL sau trong trình duyệt web của bạn: http://localhost:3000/dashboard

bạn sẽ được chuyển hướng đến trang sau

Lượt xem phiên CodeIgniter

Bấm vào nút Đăng nhập

Bạn sẽ thấy kết quả sau

Lượt xem phiên CodeIgniter

Sau khi đăng nhập, bây giờ chúng tôi có thể xem dữ liệu phiên.

Tổng kết

Trong hướng dẫn này, bạn đã tìm hiểu những kiến ​​thức cơ bản về thư viện phiên CodeIgniter và tìm hiểu cách sử dụng nó để lưu trữ dữ liệu tạm thời dưới dạng tin nhắn flash cũng như cách sử dụng lưu trữ dữ liệu lâu dài hơn, tức là dữ liệu đăng nhập của người dùng.