Phiên PHP & Cookie PHP kèm ví dụ

Cookie là gì?

Cookie là một tệp nhỏ có kích thước tối đa 4KB mà máy chủ web lưu trữ trên máy khách.

Khi cookie đã được đặt, tất cả các yêu cầu trang theo sau đều trả về tên và giá trị cookie.

Cookie chỉ có thể được đọc từ miền mà nó được phát hành. Ví dụ: một tập hợp cookie sử dụng tên miền www.guru99.com không thể đọc được từ miền Career.guru99.com.

Hầu hết các trang web trên internet đều hiển thị các yếu tố từ các lĩnh vực khác như quảng cáo. Các miền phục vụ các thành phần này cũng có thể đặt cookie của riêng chúng. Chúng được gọi là cookie của bên thứ ba.

Cookie do người dùng tạo chỉ có thể hiển thị với họ. Những người dùng khác không thể nhìn thấy giá trị của nó.

Hầu hết các trình duyệt web đều có tùy chọn tắt cookie, cookie của bên thứ ba hoặc cả hai.

Nếu đúng như vậy thì PHP sẽ phản hồi bằng cách chuyển mã thông báo cookie vào URL.

Sơ đồ hiển thị bên dưới minh họa cách hoạt động của cookie.

Cookie là gì

Ở đây,

1) Người dùng yêu cầu một trang lưu trữ cookie

2) Máy chủ đặt cookie trên máy tính của người dùng

3) Các yêu cầu trang khác từ người dùng sẽ trả về tên và giá trị cookie

Tại sao và khi nào nên sử dụng Cookies?

  • Http là một giao thức không trạng thái; cookie cho phép chúng tôi theo dõi trạng thái của ứng dụng bằng cách sử dụng các tệp nhỏ được lưu trữ trên máy tính của người dùng. Đường dẫn cookie được lưu trữ tùy thuộc vào trình duyệt. Internet Explorer thường lưu trữ chúng trong thư mục Tệp Internet tạm thời.
  • Cá nhân hóa trải nghiệm của người dùng – điều này đạt được bằng cách cho phép người dùng lựa chọn sở thích của họ. Các trang được yêu cầu sau đây sẽ được cá nhân hóa dựa trên các sở thích đã đặt trong cookie.
  • Theo dõi các trang được người dùng truy cập

Tạo Cookie

Bây giờ chúng ta hãy xem cú pháp cơ bản được sử dụng để tạo cookie.

<?php

setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]);

?>

ĐÂY,

  • Php“setcookie” là Hàm PHP được sử dụng để tạo cookie.
  • “cookie_name” là tên của cookie mà máy chủ sẽ sử dụng khi truy xuất giá trị của nó từ biến mảng $_COOKIE. Đó là bắt buộc.
  • “cookie_value” là giá trị của cookie và bắt buộc phải có
  • “[thời_gian_hết hạn]” là tùy chọn; nó có thể được sử dụng để đặt thời gian hết hạn cho cookie, chẳng hạn như 1 giờ. Thời gian được đặt bằng cách sử dụng hàm PHP time() cộng hoặc trừ số giây lớn hơn 0, tức là time() + 3600 trong 1 giờ.
  • “[cookie_path]” là tùy chọn; nó có thể được sử dụng để đặt đường dẫn cookie trên máy chủ. Dấu gạch chéo lên phía trước “/” có nghĩa là cookie sẽ được cung cấp trên toàn bộ miền. Thư mục phụ giới hạn quyền truy cập cookie vào tên miền phụ.
  • “[domain]” là tùy chọn, nó có thể được sử dụng để xác định hệ thống phân cấp truy cập cookie, tức là www.cookiedomain.com có nghĩa là toàn bộ tên miền trong khi www.sub.cookiedomain.com giới hạn quyền truy cập cookie vào www.sub.cookiedomain.com và các tên miền phụ của nó. Lưu ý rằng có thể có tên miền phụ của tên miền phụ miễn là tổng số ký tự không vượt quá 253 ký tự.
  • “[secure]” là tùy chọn, mặc định là sai. Nó được sử dụng để xác định xem cookie có được gửi qua https nếu nó được đặt thành true hay http nếu được đặt thành false.
  • “[Httponly]” là tùy chọn. Nếu nó được đặt thành true thì chỉ các ngôn ngữ kịch bản phía máy khách tức là JavaScript không thể truy cập chúng.

Lưu ý: chức năng cookie tập hợp php phải được thực thi trước thẻ mở HTML.

Bây giờ chúng ta hãy xem một ví dụ sử dụng cookie.

Chúng tôi sẽ tạo một chương trình cơ bản cho phép chúng tôi lưu trữ tên người dùng trong cookie sẽ hết hạn sau mười giây.

Mã bên dưới hiển thị cách triển khai ví dụ trên “cookies.php”.

<?php
     setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds
     echo 'the cookie has been set for 60 seconds';
?>

Đầu ra:

the cookie has been set for 60 seconds

Lấy giá trị Cookie

Tạo một tệp khác có tên “cookies_read.php” với mã sau.

<?php
     print_r($_COOKIE);    //output the contents of the cookie array variable 
?>

Đầu ra:

Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )

Lưu ý: $_COOKIE là một biến siêu toàn cục được xây dựng trong PHP.

Nó chứa tên và giá trị của tất cả các cookie đã đặt.

Số lượng các giá trị mà

Mảng $_COOKIE có thể chứa tùy thuộc vào kích thước bộ nhớ được đặt trong php.ini.

Giá trị mặc định là 1GB.

Đang thử nghiệm ứng dụng của chúng tôi.

Giả sử bạn đã lưu các tệp PHP của mình trong thư mục phptus.

  • Bước 1 – mở trình duyệt web của bạn và nhập URL http://localhost/phptuts/cookies_read.php

Lấy giá trị Cookie

Lưu ý: Chỉ hiển thị một mảng trống

  • Bước 2 – Trình duyệt tới URL http://localhost/phptuts/cookies.php

Lấy giá trị Cookie

  • Bước 3 – Chuyển về tab đầu tiên sau đó nhấp vào nút làm mới

Lấy giá trị Cookie

Đợi một phút rồi nhấp vào nút làm mới một lần nữa. Bạn đã nhận được kết quả gì?

Xóa cookie

  • Nếu bạn muốn hủy cookie trước thời gian hết hạn, bạn đặt thời gian hết hạn thành thời gian đã trôi qua.
  • Tạo một tệp mới có tên là cookie_destroy.php với mã sau
<?php

 setcookie("user_name", "Guru99", time() - 360,'/');

?>
  • Lặp lại các bước từ 1 đến 3 ở phần trên để truy xuất các giá trị cookie.
  • Mở URL http://localhost/phptuts/cookie_destroy.php
  • Chuyển sang URL http://localhost/phptuts/cookies_read.php nó hiển thị kết quả gì?

Phiên là gì?

  • Phiên là một biến toàn cục được lưu trữ trên máy chủ.
  • Mỗi phiên được gán một id duy nhất được sử dụng để truy xuất các giá trị được lưu trữ.
  • Bất cứ khi nào một phiên được tạo, một cookie chứa id phiên duy nhất sẽ được lưu trữ trên máy tính của người dùng và được trả về cùng với mọi yêu cầu tới máy chủ. Nếu trình duyệt máy khách không hỗ trợ cookie, id phiên php duy nhất sẽ được hiển thị trong URL
  • Session có khả năng lưu trữ dữ liệu tương đối lớn so với cookie.
  • Các giá trị phiên sẽ tự động bị xóa khi đóng trình duyệt. Nếu bạn muốn lưu trữ các giá trị vĩnh viễn thì bạn nên lưu trữ chúng trong cơ sở dữ liệu.
  • Giống như biến mảng $_COOKIE, các biến phiên được lưu trữ trong biến mảng $_SESSION. Giống như cookie, phiên phải được bắt đầu trước bất kỳ thẻ HTML nào.

Tại sao và khi nào nên sử dụng Phiên?

  • Bạn muốn lưu trữ thông tin quan trọng như id người dùng an toàn hơn trên máy chủ nơi những người dùng độc hại không thể kiềm chế chúng.
  • Bạn muốn chuyển giá trị từ trang này sang trang khác.
  • Bạn muốn thay thế cookie trên các trình duyệt không hỗ trợ cookie.
  • Bạn muốn lưu trữ các biến toàn cục một cách hiệu quả và an toàn hơn so với việc chuyển chúng vào URL
  • Bạn đang phát triển một ứng dụng như giỏ hàng cần lưu trữ tạm thời thông tin có dung lượng lớn hơn 4KB.

Tạo một phiên

Để tạo một phiên, trước tiên bạn phải gọi hàm PHP session_start và sau đó lưu trữ các giá trị của bạn trong biến mảng $_SESSION.

Giả sử chúng ta muốn biết số lần một trang được tải, chúng ta có thể sử dụng một phiên để làm điều đó.

Mã bên dưới cho biết cách tạo và truy xuất giá trị từ phiên

<?php

session_start(); //start the PHP_session function 

if(isset($_SESSION['page_count']))
{
     $_SESSION['page_count'] += 1;
}
else
{
     $_SESSION['page_count'] = 1;
}
 echo 'You are visitor number ' . $_SESSION['page_count'];

?>

Đầu ra:

You are visitor number 1

Phá hủy các biến phiên

Hàm session_destroy() được sử dụng để hủy toàn bộ các biến phiên Php.

Nếu bạn chỉ muốn hủy một mục duy nhất trong phiên, bạn hãy sử dụng hàm unset().

Đoạn mã dưới đây minh họa cách sử dụng cả hai phương pháp.

<?php

 session_destroy(); //destroy entire session 

?>
<?php

unset($_SESSION['product']); //destroy product session item 

?>

Session_destroy xóa tất cả dữ liệu phiên bao gồm cả cookie được liên kết với phiên.

Việc bỏ đặt chỉ giải phóng các biến phiên riêng lẻ.

Các dữ liệu khác vẫn còn nguyên.

Tổng kết

  • Cookies là các tệp nhỏ được lưu trên máy tính của người dùng
  • Cookie chỉ có thể được đọc từ miền phát hành
  • Cookie có thể có thời gian hết hạn, nếu không được đặt thì cookie sẽ hết hạn khi đóng trình duyệt
  • Phiên giống như các biến toàn cục được lưu trữ trên máy chủ
  • Mỗi phiên được cấp một id nhận dạng duy nhất được sử dụng để theo dõi các biến cho người dùng.
  • Cả cookie và phiên phải được bắt đầu trước khi bất kỳ thẻ HTML nào được gửi tới trình duyệt.