Cookie cung cấp cho ứng dụng web một phương thức lưu trữ thông tin trên trình duyệt của người dùng và truy xuất khi người dùng gửi yêu cầu xem trang.
COOKIE LÀ GÌ
- 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 server được quy định tối đa ba năm
- Cookie có tầm ảnh hưởng đến các vùng trên sever cho chúng ta quy định
THIẾT LẬP COOKIE
Sử dụng hàm setcookie[] để thiết lập cookie
setcookie[$name, $value, $expire, $path, $domain]
Trong đó:
- $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 sosongs tối đa 3 năm
- $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
Ví dụ: Thiết lập trạng thái lưu login
Ngắn gọn hơn
LẤY GIÁ TRỊ COOKIE
- Biến toàn cục $_COOKIE là nơi lưu thông tin của COOKIE
- Dựa theo tên của cookie để truy xuất và lấy giá trị
XÓA COOKIE
- Để xóa cookie ta cập nhật thời gian sống bằng một thời gian trong quá khứ
- Khi Cookie được xóa thông tin của cookie được loại bỏ ra khỏi trình duyệt và biến hệ thống $_COOKIE
GHI NHỚ
- Cookie lưu thông tin lên trình duyệt người dùng và có thể lấy giá trị ở server
- Cookie có thời gian sống nhất định
- Sử dụng $_COOKIE để truy xuất cập nhật giá trị cookie
- Để xóa cookie chúng ta thiết lập thời gian sống về khoảng thời gian trong quá khứ
BÀI TẬP
Xây dựng chức năng ghi nhớ mật khẩu trong ứng dụng đăng nhập [remember_me]
Cookie là mẩu tin nhỏ được lưu ở máy người dùng [cụ thể là tại Browser, trình duyệt], Cookie sử dụng với mục đích để theo dõi, lưu lại hoạt động truy cập. Ví dụ nhớ tên người dùng truy cập vào website có thể hoạt động qua các bước như sau:
- Server gửi các cookie cho browser [ví dụ tên người dùng: username] ...
- Browser lưu lại thông tin này [cookie]
- Lần sau truy cập URL cùng domain [tên miền] browser sẽ gửi ngược các Cookie này lên Server và Server sẽ nhận được Cookie, từ đó xác định được thông tin [như username] ...
Nên nhớ Cookie được lưu lại ở Browser, sau đó mỗi lần gửi yêu cầu đến Server nó sẽ tự động gửi thông tin này đến Server
Thiết lập, lưu Cookie
Từ PHP có thể thiết lập Cookie bằng hàm setcookie
[nhớ phải gọi trước các dòng code xuất html].
setcookie[$name, $value, $expire = 0, $path="", $domain = "", $security = false, $httponly = false];
name
là tên cookie, tên này được sử dụng để truy cập vào biến$_COOKIE
để lấy thông tinvalue
giá trị gán cho cookieexpire
Thời điểm hết hạn [hủy] của cookie, thời gian dạng Unix timestamp, có thể dùng hàmphp -S 0.0.0.0:8080 setcookie.php
0 để lấy Unix timestamp. Sau thời điểm này Cookie bị hủy lưu tại trình duyệt. Nếu thiết lập làphp -S 0.0.0.0:8080 setcookie.php
1 thì cookie hủy khi đóng trình duyệtphp -S 0.0.0.0:8080 setcookie.php
2 đường dẫn mà cookie có hiệu lực. Sử dụngphp -S 0.0.0.0:8080 setcookie.php
3 cho biết cookie có hiệu lực ở cấp độ domain - mọi URL thuộc domain, nếu thiết lập làphp -S 0.0.0.0:8080 setcookie.php
4 thì Cookie chỉ có hiệu lực với các URL dạngphp -S 0.0.0.0:8080 setcookie.php
4 và các con của nó nhưphp -S 0.0.0.0:8080 setcookie.php
6... Nếu để giá trị mặc định "" thì có hiệu lực theo đường dẫn hiện tạiphp -S 0.0.0.0:8080 setcookie.php
7 tên miềnphp -S 0.0.0.0:8080 setcookie.php
8 = true nếu sử dụng HTTPS để truyền dữ liệu [mặc định false]php -S 0.0.0.0:8080 setcookie.php
9 mặc định là false, nếu true thì chỉ cho phép cookie với giao thức HTTP
Ví dụ:
setcookie[ "name", "", time[]- 60, "/","", 0];0
Đoạn mã trên thiết lập lưu Cookie với tên name
, giá trị là
setcookie[ "name", "", time[]- 60, "/","", 0];2, hết hạn sau 10 phút [tức 600 giây]
Bạn có thể chạy lệnh
php -S 0.0.0.0:8080 setcookie.php
Sau đó truy cập địa chỉ
setcookie[ "name", "", time[]- 60, "/","", 0];3 để kiểm tra, ví dụ dùng Chrome
Khi truy cập, phần header trả về có thông tin về thiết lập Cookie, ngược lại nếu đã có Cookie khi trình duyệt gửi yêu cầu - nó thiết lập giá trị cookie vào phần header của request
Hoặc dùng lệnh curl để xem header trả về:
Truy cập - đọc - Cookie
Bạn dùng biến $_COOKIE
là một mảng để truy cập thông tin cookie do trình duyệt gửi lên. Giống như
setcookie[ "name", "", time[]- 60, "/","", 0];5 bạn nên dùng
setcookie[ "name", "", time[]- 60, "/","", 0];6 để kiểm tra sự tồn tại của COOKIE.
setcookie[ "name", "", time[]- 60, "/","", 0];7
Xóa Cookie
Để yêu cầu trình duyệt xóa cookie bạn sử dụng chính hàm setcookie với thủ thuật đặt thời gian đã hết hạn. Ví dụ:
setcookie[ "name", "", time[]- 60, "/","", 0];
Khái niệm về Session
Để trao đổi dữ liệu từ trang này qua trang khác [giữa 2 request] thì làm như thế nào? Ví dụ nếu người dùng đã đăng nhập, thì thông tin đăng nhập được lưu lại và chuyển cho các trang khác nhau trong phiên làm việc để tránh mỗi lần gửi request lại phải đăng nhập, hay người dùng chọn đựa mặt hàng vào giỏ hàng thì phải nhớ để chuyển đến trang thanh toán ... PHP có cơ chế để làm việc này đó chính là
setcookie[ "name", "", time[]- 60, "/","", 0];8
Session là thông tin về phiên làm việc cho từng khách truy cập, trong PHP nó tạo một file trong thư mục tạm [thư mục này cài đặt ở
setcookie[ "name", "", time[]- 60, "/","", 0];9] để lưu thông tin này, thông tin này được dùng chung cho tất cả các trang mà khách truy cập. Mỗi khách truy cập, dựa vào thông tin trình duyệt gửi lên nó tạo [hoặc phục hồi] một Session riêng cho khách đó.
Sự làm việc của Session có thể vắn tắt như sau:
- Khi khách lần đầu truy cập, PHP tự động tạo ra một định danh duy nhất cho khách đó, định danh này là một chuỗi ngẫu nhiên - duy nhất. Nó là tham số để xác định tên file dữ liệu session.
- Một mẩu tin nhỏ Cookie gọi là PHPSESSID [là ánh xạ đến định danh ở trên] sẽ được gửi đến trình duyệt và trình duyệt lưu giữ PHPSESSID này, để sau đó mỗi lần trình duyệt truy cập nó gửi lại PHPSESSID cho PHP.
- PHP dựa vào PHPSESSID gửi đến để phục hồi - lấy lại dữ liệu từ file là thông tin của SESSION.
- Session bị hủy - mất khi trình duyệt bị đóng lại, thông thường PHP cũng có tham số ấn định thời gian tồn tại của SESSION, ví dụ như 30 phút.
Như vậy
setcookie[ "name", "", time[]- 60, "/","", 0];8 là cơ chế lưu trữ và phục hồi thông tin cho phiên làm việc [truy cập] của khách, nhằm trao đổi thông tin khi duyệt từ page này sang page khác. Để Session hoạt động thì còn liên quan tới hỗ trợ
Kiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>1 từ trình duyệt. Ví dụ trong Chrome bạn block Cookie từ facebook, thì bạn không thể đăng nhập được facebook.Chạy Session - Lưu trữ và lấy thông tin
Session trong PHP bắt đầu hoạt động sau khi bạn gọi hàm
Kiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>2, hàm này sẽ phục hồi dữ liệu SESSION nếu đã có, nếu chưa nó sẽ tạo ra SESSION mới cho bạn. Để sử dụng khuyên nên gọi hàm này ngay khi bắt đầu của Page. Một cách khác mà không cần quan tâm đến gọiKiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>2 đó là thiết lập cho PHP tự động chạy hàm này bàng cáchKiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>4 trongKiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>5Khi mà hệ thống session trong PHP được chạy, mặc định nó sẽ gửi về trình duyệt một Cookie với tiền tố
Kiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>6, tất nhiên có thể thay đổi tiền tố này trong php.iniVí dụ trang chạy thử Session
Kiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>7Kiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>Bạn là vào truy cập 1 lần vào trangTrong đoạn code trên có sử dụng
Kiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>8 để kiểm tra xem Session có tồn tại hay chưa, nếu có rồi mà bạn gọiKiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session
Biến toàn cục
$_SESSION:
kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàmisset[]
để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.Ví dụ đếm lượt truy cập trang của một khách
countaccess.php
Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang'; echo $msg; ?>2 có thể PHP sẽ cảnh báo lỗi WarningKhi có chạy Session thì dữ liệu trả về cho trình duyệt nó gửi kèm một mẩu tin nhỏ ở phần Header, dữ liệu này là Cookie liên quan đến ID của Session, để request trình duyệt lưu trữ, request tiếp theo nó sẽ gửi dữ liệu này đến Server và PHP sẽ phục hồi Session theo Cookie này.
Hủy Session
Bạn có thể hủy một biến, giá trị ... đã lưu vào Session:
- Để hủy một biến nào đó lưu trữ trong Session thì dùng lệnh unset ví dụ
Bạn là vào truy cập 1 lần vào trang
0 - Để hủy toàn bộ Session thì dùng lệnh
Bạn là vào truy cập 1 lần vào trang
1
Từ nắm vững Cookie và Session là cơ sở để xây dựng lên các hệ thống như cho phép user đăng nhập vào website, xây dựng ứng dụng giỏ hàng đặt hàng ...