Ngu ngơ học làm web (87) - Session

Tiếp theo của: Ngu ngơ học làm web (86) - Lỗi và ngoại lệ
-----

Phần 87.       Session


Đây là clip số 100:


- Khi khai báo biến trên một trang PHP, biến này chỉ tồn tại và được nhận ra trên chính trang đó, khi người duyệt web chuyển trang (page) khác thì toàn bộ các biến (và giá trị của biến) sẽ bị hủy, do vậy để lưu lại giá trị của một biến nhằm sử dụng giữa các trang cần dùng tới session.

- Sử dụng session để lưu dữ liệu của người dùng trên server

- Nội dung của session chỉ được lưu tạm thời, nó sẽ bị xóa sau khi người dùng rời khỏi website

- Mỗi session có một định danh riêng

- Vị trí lưu session được quy định tại mục session.save_path trong php.ini

- Mỗi người truy cập (visitor) sẽ được tạo một chuỗi duy nhất, thông tin sẽ được chứa trong chuỗi duy nhất này

Một số hàm của session:

- session_start(): khởi tạo session

- Cập nhật thông tin session thông qua biến $_SESSION

- Xóa session: unset(), session_unset(), session_destroy()

Ví dụ:

  // khởi tạo session
  session_start();
  // tạo session
  $_SESSION['name'] = 'Nguyễn Văn Tèo';
  echo $_SESSION['name'];
  // thay đổi giá trị của session
  $_SESSION['name'] = 'abc';
  echo '<br />' . $_SESSION['name'];
  // kiểm tra session có tồn tại?
  if (isset($_SESSION['age'])) {
    $_SESSION['age'] = 10;
  } else {
    $_SESSION['age'] = 20;
  }
  echo '<br />' . $_SESSION['age'];
  unset($_SESSION['age']);
  if (isset($_SESSION['age'])) {
    echo 'Tồn tại';
  } else {
    echo 'Không tồn tại';
  }

Đây là clip số 101:


Các nội dung có thể lưu vào session: biến, mảng, hàm, tập tin, hình ảnh

Ví dụ,

Lưu biến vào session,

$variable = 'abc';
  session_start();
  $_SESSION['var'] = $variable;

  echo '<pre>';
  print_r($_SESSION);
  echo '</pre>';

Lưu mảng vào session,

$arr = array(
      array('tên' => 'Tèo', 'tuổi' => 10),
      array('tên' => 'Tí', 'tuổi' => 11),
      array('tên' => 'Sửu', 'tuổi' => 12)
    );
  session_start();
  // xóa các session trước đó
  session_unset();
  $_SESSION['arr'] = $arr;

  echo '<pre>';
  print_r($_SESSION);
  echo '</pre>';

Lưu hàm vào session:

session_start();
  // xóa các session trước đó
  session_unset();
  $_SESSION['func'] = 'function checkNumber($number) {
                          return($number % 2 ? "số lẻ" : "số chẵn");
                        }';
  eval($_SESSION['func']); // hàm eval($code) sẽ in ra, đánh giá và kiểm tra đoạn code $code theo cú pháp PHP
  echo checkNumber(2);

Lưu file vào session,

<?php
  session_start();
  //xóa các session trước đó
  session_unset();
  $_SESSION['file'] = '<!DOCTYPE html>
                        <html lang="en">
                        <head>
                          <meta charset="UTF-8">
                          <title>PHP</title>
                        </head>
                        <body>
                          <h1>This is a file</h1>
                        <?php
                          function checkNumber($number) {
                            return($number % 2 ? "số lẻ" : "số chẵn");
                          }
                        ?>';
  eval('?>' . $_SESSION['file']);
  echo checkNumber(3);
?>

Lưu ảnh vào session, (chỉ để mã PHP sẽ chạy)

<?php
  session_start();
  //xóa các session trước đó
  session_unset();
  $image = 'images/bg.jpg';
  if (file_exists($image)) {
    // lấy thông tin của một tập tin hình ảnh
    $_SESSION['image']['info'] = getimagesize($image);
    // lấy nội dung của hình ảnh
    $_SESSION['image']['data'] = file_get_contents($image);
  } else {
    echo 'Tập tin không tồn tại';
  }
  header('Content-type: image/jpeg');
  echo $_SESSION['image']['data'];
?>

Sử dụng hàm header() để xác định kiểu dữ liệu sẽ xuất.

Hàm session_encode(): chuyển nội dung đang được lưu trong session thành một chuỗi đặc biệt

Hàm session_decode(): phân tích chuỗi đặc biệt do hàm session_encode() tạo ra và lưu vào session.

Ví dụ về hàm session_encode(),

  session_start();
  //xóa các session trước đó
  session_unset();
  $_SESSION['var'] = 'abc';
  $session = session_encode();
  echo $session;

Kết quả xuất ra màn hình là: var|s:3:"abc";

Ví dụ về session_decode(),

  session_start();
  //xóa các session trước đó
  session_unset();
  $_SESSION['var'] = 'abc';
  $session = session_encode();
  echo $session;
  // xóa session
  session_unset();
  // in sẽ thấy session rỗng
  echo '<pre>';
  print_r($_SESSION);
  echo '</pre>';
  // khôi phục lại giá trị cũ của session
  session_decode($session);
  // in sẽ thấy session được phục hồi
  echo '<pre>';
  print_r($_SESSION);

  echo '</pre>';
-----------
Cập nhật [4/1/2018]
-----------
Xem thêm: