01/10/2018, 15:30

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

cookie

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>

0