Cookie, hay HTTP cookie, web cookie, browser cookie, cookie trong PHP là một đoạn dữ liệu nhỏ được gửi từ phía website và lưu trữ ở trình duyệt của người dùng client khi họ duyệt website này. Mỗi lần người dùng load website, trình duyệt sẽ tự động gửi cookie về web server để thông báo cho website biết các hành động trước đó của người dùng.
Cookie thường được sử dụng để xác định người dùng. Cookie được thiết kế để trở thành một cơ chế đáng tin cậy, giúp website ghi nhớ các thông tin trạng thái hoặc lưu trữ các hoạt động của người dùng.
3 bước để xác định người dùng trả về
- Script phía Server gửi một tập các Cookie cho trình duyệt. Ví dụ: tên, tuổi, địa chỉ …
- Trình duyệt sẽ lưu trữ thông tin này trên máy local để sử dụng trong tương lại.
- Lần tiếp theo khi trình duyệt gửi bất cứ yêu cầu nào cho Web Server, nó sẽ gửi các thông tin Cookie đó cho Server và Server sẽ sử dụng thông tin đó để xác định người dùng này.
Một số thông tin về Cookie
- Cookie được lưu trữ theo cặp thông tin key/value
- Cookie được lưu ở trình duyệt người dùng và có thể truy xuất từ server khi người dùng truy cập trang
- Thời gian sống của cookie được quy định tối đa ba năm
- Cookie có tầm ảnh hưởng đến các vùng trên server cho chúng ta quy định
Cookie sẽ không bị mất khi bạn đóng ứng dụng, nó phụ thuộc vào thời gian sống mà bạn thiết lập cho nó.
Cookie được tạo ra bởi website và gởi tới trình duyệt, do vậy 2 website khác nhau (cho dù có cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới trình duyệt.
Ngoài ra, mỗi trình duyệt quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 trình duyệt cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau.
Mỗi trình duyệt web có thể lưu trữ ít nhất 300 cookie trong một file 4KB, và ít nhất 20 cookie trên mỗi server hay domain.
Thiết lập Cookie trong PHP
Để thiết lập cookie trong PHP ta sử dụng cú pháp setcookie().
setcookie($name, $value, $expire, $path, $domain, $secure, $httponly);
Các thuộc tính thành phần của Cookie
- $name: Tên cookie
- $value: Giá trị cookie (mặc định chuổi rỗng)
- $expire: Thời gian sống cookie, nếu được thiết lập 0 thì sau khi tắt trình duyệt cookie tự mất. Thời gian sống tối đa là 3 năm. Thời gian được thiết lập sử dụng PHP function time() để cộng trừ một số giây lớn hơn 0 tức là time() + 3600 là set thời hạn cookie trong 1 giờ.
- $path: Đường dẫn trên server mà cookie có hiệu lực. Nếu được thiết lập là / thì cookie có hiệu lực với tất cả các file trên server.
- $domain: Tên miền cookie có hiệu lực. ( Bạn có thể set tối đa 253 ký tự.)
- $secure: là một thuộc tính bảo mật được enabled khi sử dụng HTTPS, đảm bảo việc cookie luôn được mã hóa khi chuyển từ client đến server, giúp nó tránh khỏi việc bị nghe trộm làm lộ thông tin. Nó có thể được thiết lập thành 1 để chỉ rằng Cookie này chỉ được gửi bằng truyền dẫn an toàn sử dụng HTTPS, ngược lại nếu thiết lập thành 0, nó có nghĩa rằng Cookie có thể gửi bằng HTTP thông thường.
- $httpOnly: thuộc tính này của cookie được hỗ trở bởi hầu hết các trình duyệt. Một HttpOnly session cookie sẽ chỉ được sử dụng trong một HTTP (hoặc HTTPS) request, do đó hạn chế bị truy cập bởi các non-HTTP APIs chẳng hạn Javascript. Việc hạn chế này làm giảm nhẹ nhưng không loại trừ việc đánh cắp cookie thông qua lỗ hổng Cross-site scripting (XSS).
2 thành phần đầu tiên là $name và $value là bắt buộc phải có, các thành phần còn lại là tuỳ chọn.
Ví dụ: tạo 1 file cookie.php có cookie lưu thông tin tên và tuổi của 1 sinh viên:
<?php setcookie("name", "Larva Thuận", time()+3600, "/","", 0); setcookie("age", "20", time()+3600, "/", "", 0); ?> <html> <head> <title>Thiết lập Cookie trong PHP</title> </head> <body> <?php echo "Thiết lập Cookie"?> </body> </html>
Đọc – Truy cập – Sử dụng cookie trong PHP
Do tất cả Cookie được lưu trữ trong biến toàn cục $_COOKIE, nên để lấy giá trị của Cookie ta chỉ việc truy xuất vào biến này.
Ngoài ra ta cũng có thể lấy giá trị của cookie thông qua biến $HTTP_COOKIE_VARS nhưng cách này không khuyên khích dùng.
Cú pháp: $_COOKIE['value'];
Từ ví dụ về file cookie.php trên ta sẽ tiếp tục tạo file index.php để lấy dữ liệu cookie đã được lưu trong trình duyệt.
<html> <head> <title>Thiết lập Cookie trong PHP</title> </head> <body> <?php echo $_COOKIE["name"]. "<br />"; echo $_COOKIE["age"] . "<br />"; ?> </body> </html>
Các bạn hãy chạy file cookie.php trước rồi chạy file index.php sau, bạn sẽ thấy trình duyệt echo ra được thông tin tên và tuổi. Nếu như các bạn chạy file index.php trước mà chưa chạy file cookie.php thì trình duyệt sẽ báo lỗi không xác định dữ liệu trường giá trị. Vậy để không bị báo lỗi trên bạn chỉ cần sửa một chút trong file index.php bằng cách thêm hàm isset() để kiểm tra cookie đã được thiết lập hay chưa như sau:
<html> <head> <title>Thiết lập Cookie trong PHP</title> </head> <body> <?php if(isset($_COOKIE['name']) && isset($_COOKIE['age'])) { echo $_COOKIE["name"]. "<br />"; echo $_COOKIE["age"] . "<br />"; } ?> </body> </html>
Cách xoá Cookie
Để hủy (xoá) 1 cookie đã được tạo ta có thể dùng 1 trong 2 cách sau:
- Khởi tạo đè cookie name và không truyền các tham số khác vào.
- Thiết lập lại thời gian sống cho Cookie về số âm là thời điểm trong quá khứ.
Ở cách 1, bạn sẽ sử dụng lại hàm setcookie() chỉ truyền vào mỗi tham số của thuộc tính name và không truyền thêm bất kỳ thuộc tính nào khác.
Cú pháp: setcookie(“cookie name”);
Nhưng đối với cách khởi tạo đè cookie name này không phải lúc nào cũng hoạt động tốt, cho nên cách tốt nhất là cách 2: thiết lập lại thời gian sống cho cookie tại thời điểm ở quá khứ.
//thiết lạp lại thời gian hết hạn 1 giờ trước setcookie("age", "20", time() - 3600, "/", "", 0);
Kiểm tra Cookie có được bật hay không
Ví dụ sau kiểm tra xem cookie có được bật hay không. Trước tiên, hãy thử tạo một cookie bằng hàm setcookie() trong PHP, sau đó đếm số phần tử của mảng mảng $_COOKIE.
<?php setcookie("test_cookie", "test", time() + 3600, '/'); ?> <html> <body> <?php if (count($_COOKIE) > 0) { echo "Cookies đang được bật."; } else { echo "Cookies đang bị tắt."; } ?> </body> </html>
Như vậy mình đã giới thiệu qua cho các bạn về cookie và những vấn đề liên quan đến cookie mà bạn cần nắm, bài viết mình xin dừng tại đây. Nếu có những vấn đề trọng tâm liên quan đến cookie mình sẽ làm một bài riêng sau, các bạn thông cảm nhé!
Qua bài học tiếp theo chúng ta sẽ xem qua về Session và cách thao tác với Session, hãy tiếp tục series học PHP căn bản ở bài viết tiếp theo nhé!
Xem thêm:
- Bài 7: Vòng lặp Foreach trong PHP (Các loại vòng lặp phần 2)
- Bài 8: lệnh Break, Continue và các hàm (function) exit, die thường dùng trong PHP
- Bài 10: Mảng (Array) Trong PHP
- Bài 11: Các hàm xử lý mảng (Array) trong PHP
- Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP
- Bài 13: Phương thức GET và POST trong PHP
CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ