Bài 13: PHP – Cookies
Cookies là các file văn bản lưu trử trên máy người dùng, và chúng được giữ cho mục đích sử dụng lưu vết (tracking). PHP hổ trợ http cookies. Nghĩa là bạn dùng hàm cookie của PHP thì nó sẽ gửi thông tin về server theo giao thức http. Còn http là cái j thì sẽ giải thích ở bài khác, serial ...
Cookies là các file văn bản lưu trử trên máy người dùng, và chúng được giữ cho mục đích sử dụng lưu vết (tracking). PHP hổ trợ http cookies. Nghĩa là bạn dùng hàm cookie của PHP thì nó sẽ gửi thông tin về server theo giao thức http. Còn http là cái j thì sẽ giải thích ở bài khác, serial khác.
Có 3 bước xác minh và trả về dữ liệu người dùng trong cookie.
- Server gửi một bộ cookies tới trình duyệt, ví dụ name, age hoặc ID …
- Trình duyệt lưu trữ thông tin này ở máy người dùng để sử dụng vào tương lai
- Khi lần tới trình duyệt gửi bất kỳ yêu cầu tới web server thì nó sẽ gửi thông tin cookie đó tới server và server sử dụng thông tin đó để xác minh người sử dụng.
Trong bài học này sẽ chỉ cho bạn cách tạo cookie, cách truy cập chúng(gọi cookie) và hủy bỏ khi không cần tới nữa.
Mổ xẻ bên trong một Cookie
Cookies thường đặt một bộ http header, một script php sẽ tạo ra một header trông giống như sau:
HTTP/1.1 200 OK
Date: Fri, 01 July 2016 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Monday, 04-July-16 22:03:38 GMT;
path=/; domain=dammelaptrinh.com
Connection: close
Content-Type: text/html
Như bạn có thể thấy dòng Set-Cookie chứa đụng cặp giá trị là name=xyz, ngày hết hạn, đường dẩn (path) và domain. Tên và giá trị sẽ được mã hóa, ngày hết hạn là để báo cho trình duyệt biết và quên nó đi khi đã hết hạn
Nếu trình duyệt được cấu hình để lưu trử cookies, thì nó sẽ giữ thông tin này cho đến khi ngày hết hạn. Nếu người dùng thao tác trên trình duyệt ở bất kỳ page mà khớp với đường dẩn, domain của cookie, thì nó sẽ gửi lại cookie tới server trông giống như sau:
GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz
Diễn giải cách làm việc của cookie như sau:
Khi hệ thống hay đúng hơn là bạn viết code tạo một cookie thì, một header sẽ được gửi tới server bao gồm thông tin về cặp giá trị, domain, path, thời gian hết hạn v.v…
Và khi chương trình gọi đến cookies đó để lấy lại thông tin đã đặt trước đó sử dụng, nó sẽ gửi lại thông tin header đã đăng ký với server, lúc đó server sẽ đọc bảng header và nhận ra thông tin này đã được đăng ký lưu trử ở máy khách hàng rồi và thông báo cho trình duyệt biết lấy thông tin ở máy khách hàng sử dụng mà không phải làm j thêm.
Điều này hiểu tại sao khi các bạn từng đăng nhập vào một website nào đó, rồi vài ngày sau bạn mở lại web đó thì bạn đã tự động đăng nhập vô web đó luôn, do đã được đặt cookie ở lần đăng nhập trước đó rồi và cookie còn thời hạn.
Tạo Cookies
Cú pháp: setcookie(name, value, expire, path, domain, security);
- Name– Tên của cookie và được lưu trữ trong môi trương biến được gọi là $ Biến này được sử dụng để truy cập cookie.
- Value– Giá trị, nội dung mà bạn muốn lưu trữ.
- Expiry– Ngày giờ hết hạn cookie, mặc định nó có giá trị là 00:00:00 GMT on 1st Jan 1970. Sau khoảng thời gian này thì cookie không thể truy cập. Nếu đối số này không được đưa vào thì cookie sẽ tự động hết hạn khi trình duyệt đóng.
- Path– Chỉ định những nơi cookie có giá trị, nếu đưa vào một dấu / thì cookie sẽ có giá trị bất kỳ thư mục nào..
- Domain– Với những site lớn thì có rất nhiều nơi lưu trữ và tên miền. Nếu bạn đưa vào domain thì cookie chỉ có giá trị nới bạn muốn nó lưu trữ.
- Security– Đặt giá trị là 1 nếu bạn muốn bảo mật cookie truyền đi với https, 0 nếu sử dụng http.
Thông trường chúng ta sử dụng 3 đối số là chủ yếu trong việc tạo cookie đó là name,value và expire. Xét ví dụ sau:
<?php
setcookie(“name”, “Angry Bird”, time()+3600, “/”,””, 0);
setcookie(“age”, “36”, time()+3600, “/”, “”, 0);
?>
<html>
<head>
<title>Setting Cookies with PHP</title>
</head>
<body>
<?php
echo “Set Cookies”
?>
</body>
</html>
Chạy ví dụ trên ra ngoài trình duyệt và mở inspect element trình duyệt bạn sẽ thấy cookie gửi một header tới server và được server phản hồi như hình bên dưới
Truy cập, đọc Cookies
Có nhiều cách truy cập cookie. Cách đơn giản là sử dụng biến $_COOKIE.
<html>
<head>
<title>Accessing Cookies with PHP</title>
</head>
<body>
<?php
echo $_COOKIE[“name”]. “<br />”;
echo $_COOKIE[“age”] . “<br />”;
?>
</body>
</html>
Bạn có thể sử dụng isset() để kiễm trà cookie đã được tạo hay chưa
<html>
<head>
<title>Accessing Cookies with PHP</title>
</head>
<body>
<?php
if( isset($_COOKIE[“name”]))
echo “Welcome ” . $_COOKIE[“name”] . “<br />”;
else
echo “Sorry… Not recognized” . “<br />”;
?>
</body>
</html>
Xóa Cookie
Để xóa một cookie cách đơn giản nhất là ta đặt lại cookie đó với thời gian là quá khứ
<?php
setcookie( “name”, “”, time()- 60, “/”,””, 0);
setcookie( “age”, “”, time()- 60, “/”,””, 0);
?>
<html>
<head>
<title>Deleting Cookies with PHP</title>
</head>
<body>
<?php echo “Deleted Cookies” ?>
</body>
</html>