Mảng cookie trong PHP

Như chúng ta đã biết, HTML được thiết kế như một giao thức phi trạng thái. Mỗi khi bạn mở một trang mới, mọi giá trị từ trang trước đó sẽ bị mất, trừ khi được truyền qua các biến GET hoặc POST hoặc sử dụng COOKIE, đó là những gì chúng ta đang khám phá trong bài viết này

Một lớp ListBuilder đơn giản

Ở đây chúng tôi có một lớp rất đơn giản cho phép chúng tôi thêm các mục vào danh sách, tìm kiếm trong danh sách và truy xuất toàn bộ danh sách dưới dạng một mảng. Về cơ bản, nó là một trình bao bọc cho Mảng PHP tích hợp

// Original PHP code by Chirp Internet: www.chirpinternet.eu // Please acknowledge use of this code by including this header. class ListBuilder { private $list = []; public function contains[$val] { return in_array[$val, $this->list]; } public function add[$val] { if[!$this->contains[$val]] { $this->list[] = $val; } } public function get[] { return $this->list; } } ?>

ListBuilder hiện có thể được sử dụng như sau

add['red']; $list->add['green']; $list->add['blue']; var_dump[$list->get[]]; var_dump[$list->contains['green']]; var_dump[$list->contains['purple']]; ?>

Cái nào tạo ra đầu ra sau

array[3] { [0]=> string[3] "red" [1]=> string[5] "green" [2]=> string[4] "blue" } bool[true] bool[false]

Cho đến nay, rất tốt, nhưng chúng tôi thực sự chưa đạt được nhiều thành tựu, vì bất kỳ danh sách nào chúng tôi tạo ra sẽ tan thành mây khói ngay khi chúng tôi rời khỏi trang. Để làm cho nó hữu ích hơn, chúng tôi cần có khả năng lưu danh sách của mình bằng cách nào đó để có thể truy xuất danh sách này khi chúng tôi mở một trang khác hoặc rời khỏi trang web và quay lại

Cách tiếp cận đơn giản nhất là sử dụng cookie của trình duyệt. Các tùy chọn khác bao gồm sử dụng PHIÊN, sẽ an toàn hơn nếu bạn chuyển thông tin cá nhân, nhưng về cơ bản vẫn là COOKIE

Lưu và truy xuất giá trị bằng cookie

Sử dụng lớp ListBuilder của chúng tôi làm điểm bắt đầu, giờ đây chúng tôi có thể thêm chức năng để lưu và truy xuất các giá trị danh sách bằng cách sử dụng cookie

// Original PHP code by Chirp Internet: www.chirpinternet.eu // Please acknowledge use of this code by including this header. class CookieList extends ListBuilder { public function save[$expires = 0] // minutes { if[$expires && is_int[$expires]] { $expires = time[] + 60 * $expires; } if[headers_sent[]] { error_log[__METHOD__ . ": cookies must be sent *before* any output from your script"]; return false; } return setcookie[ __CLASS__, json_encode[$this->get[]], $expires, "/" ]; } public function __construct[] { if[isset[$_COOKIE[__CLASS__]] && $_COOKIE[__CLASS__]] { // reload list items from cookie $arr = json_decode[$_COOKIE[__CLASS__]]; if[is_array[$arr] && $arr] { foreach[$arr as $val] { $this->add[$val]; } } } } } ?>

Cùng với các phương thức thêm, lấy và chứa hiện có, lớp của chúng ta hiện có một hàm tạo và một phương thức lưu mới. Gọi lưu sẽ gửi cookie tới trình duyệt có tên CookieList [hoặc có thể là Namespace\CookieList] chứa nội dung danh sách dưới dạng chuỗi được mã hóa JSON

Cookie sẽ hết hạn vào cuối phiên trừ khi một giá trị đại diện cho số phút để giữ cookie được chuyển đến phương thức lưu [xem bên dưới]

Thời gian hết hạn cookie của trình duyệt liên quan đến lần cuối danh sách được lưu [tôi. e. khi cookie được đặt lần cuối]. Nếu bạn muốn nó tồn tại lâu hơn, tập lệnh của bạn sẽ cần lưu lại danh sách theo định kỳ

Một vấn đề rất phổ biến với cookie PHP là chúng chỉ có thể được gửi tới trình duyệt trước khi bất kỳ HTML hoặc nội dung nào khác được xuất ra. Trừ khi bạn đang sử dụng Bộ đệm đầu ra, nhưng đó là một câu chuyện khác

Đưa nó vào thực tế

Trong môi trường thế giới thực, bạn có thể đang lưu trữ nội dung của giỏ hàng hoặc danh sách các sản phẩm đã xem. Bạn thậm chí có thể tạo một danh sách [mảng] mảng cho các cấu trúc dữ liệu phức tạp hơn

Ở đây chúng tôi chỉ sử dụng các chuỗi văn bản đơn giản như trước đây

Mã để chạy trên Trang #1

add['alpha']; $list->add['beta']; $list->add['gamma']; var_dump[$list->save[60]]; // output: bool[true] $list->add['omega']; ?>

Thao tác này sẽ tạo cookie có thời hạn sử dụng sau một giờ [60 phút] trong tương lai, sau đó trình duyệt sẽ 'quên'. Nội dung cookie sẽ là %5B%22alpha%22%2C%22beta%22%2C%22gamma%22%5D

Mã để chạy trên Trang #2

Trong khi cookie vẫn tồn tại trong trình duyệt, hãy chạy như sau

// the constructor will load any saved values from the cookie var_dump[$list->get[]]; ?>

sẽ xuất

array[3] { [0]=> string[5] "alpha" [1]=> string[4] "beta" [2]=> string[5] "gamma" }

Chúng tôi đã tạo thành công một danh sách, lưu trữ danh sách đó trong cookie của trình duyệt và truy xuất danh sách đó trên một trang khác

Lưu ý rằng chúng tôi không thấy "omega" trong danh sách đã truy xuất vì nó chỉ được thêm vào sau khi đã đặt cookie. Nhưng trên bất kỳ trang nào đang tải danh sách, có thể thêm các mục mới và lưu danh sách đã cập nhật. Một phương thức loại bỏ cũng sẽ là một bổ sung tốt cho lớp ListBuilder cơ sở

Vui lòng sử dụng mã này theo ý muốn và cho chúng tôi biết bên dưới nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào

Đang lưu vào một SESSION

Các phiên PHP là một cách triển khai cookie trong đó nội dung thực tế được lưu trữ trong một tệp trên máy chủ [theo session_save_path] trong khi cookie của trình duyệt chỉ chứa một khóa mà máy chủ sử dụng để truy xuất dữ liệu

Lớp sau sẽ lưu danh sách của chúng ta vào PHIÊN thay vì cookie

// Original PHP code by Chirp Internet: www.chirpinternet.eu // Please acknowledge use of this code by including this header. class SessionList extends ListBuilder { public function save[$expires = 0] // minutes { if[headers_sent[]] { error_log[__METHOD__ . ": cookies must be sent *before* any output from your script"]; return false; } session_name[__CLASS__]; if[$expires && is_int[$expires]] { session_set_cookie_params[60 * $expires]; } session_start[]; $_SESSION['list'] = $this->get[]; session_write_close[]; return true; } public function __construct[] { session_name[__CLASS__]; session_start[]; if[isset[$_SESSION['list']] && is_array[$_SESSION['list']] && $_SESSION['list']] { // reload list items from session foreach[$_SESSION['list'] as $val] { $this->add[$val]; } } session_write_close[]; } } ?>

Điều này sẽ tạo cookie SessionList [hoặc Namespace%5CSessionList] trong trình duyệt nếu bạn đang sử dụng không gian tên trong ứng dụng của mình. Mặt khác, việc triển khai giống hệt với ví dụ trước

Trong mã này, việc xử lý SESSION khá nghiệp dư, nhưng nó hoạt động. Một hệ thống tốt hơn sẽ bảo tồn/khôi phục mọi phiên hiện có, trong số những thứ khác. Và các chức năng phiên có thể được tạo thành một Đặc điểm để chúng có thể được đưa vào bất kỳ lớp mới nào

Kiểm tra phiên đó. gc_maxlifetime không quá ngắn vì điều này sẽ xóa các phiên không hoạt động trên máy chủ [mặc định là 24 phút]

Không có lớp nào ở trên hỗ trợ nhiều danh sách, nhưng bạn có thể mở rộng chúng bằng các tên lớp khác nhau cho các mục đích sử dụng khác nhau và sau đó chúng sẽ không xung đột

Cookie có thể là một mảng trong PHP không?

Tên cookie có thể được đặt làm tên mảng và sẽ có sẵn cho các tập lệnh PHP của bạn dưới dạng mảng nhưng các cookie riêng biệt được lưu trữ trên hệ thống của người dùng. Xem xét phát nổ[] để đặt một cookie có nhiều tên và giá trị.

Làm cách nào để chuyển mảng trong cookie trong PHP?

$data = json_decode[$_COOKIE['your_cookie_name'], true]; JSON cũng có thể là lựa chọn tốt nếu bạn cần đọc cookie ở giao diện người dùng bằng JavaScript. Trên thực tế, bạn có thể sử dụng bất kỳ nhóm phương thức Encrypt_array_to_string/decrypt_array_from_string nào sẽ chuyển đổi mảng thành chuỗi và chuyển đổi chuỗi trở lại cùng một mảng.

Chúng ta có thể đặt mảng trong cookie không?

Đặt mảng trong cookie . Bạn có thể chuyển đổi một mảng thành JSON bằng JSON. xâu chuỗi []. the array cannot be set as it is, but it can be set as a character string by converting the array to JSON. You can convert an array to JSON with JSON. stringify[].

Làm cách nào để lưu trữ cookie trong PHP?

Hàm PHP setcookie[] .
$cookie_name = "người dùng";
nếu[. isset[$_COOKIE[$cookie_name]]] { echo "Cookie name '". $cookie_name. "' không được đặt. "; } khác {.
.
.

Chủ Đề