Liên hệ
Ủng hộ, đăng ký theo dõi kênh

Sử dụng Session và Cookie trong PHP

Sử dụng Session để lưu trữ phiên làm việc, tương tác với biến $_SESSION và $_COOKIE trong PHP

Khái niệm về Session

Để trao đổi dữ liệu từ trang này qua trang khác 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 để khỏi 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ớ khi chuyển đến trang thanh toán ... PHP có cơ chế để làm việc này đó chính là SESSION

Session trong PHP tạo một file trong thư mục tạm (thư mục này cài đặt ở php.ini : session.save_path để lưu trữ thông tin, thông tin này được dùng chung cho tất cả các trang mà khách truy cập. Tất nhiên là 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 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 SESSION 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ợ COOKIE 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 session_start(), 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ọi session_start() đó là thiết lập cho PHP tự động chạy hàm này bàng cách session.auto_start = 1 trong php.ini

Biến $_SESSION: là mảng mà SESSION lưu trữ thông tin, 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àm isset() để 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.

<?php
if (session_id() === '')
session_start();

if( isset( $_SESSION['counter'] ) ) {
    $_SESSION['counter'] += 1;
}else {
    $_SESSION['counter'] = 1;
}

$msg = "<p>Bạn là vào truy cập ".  $_SESSION['counter'] . ' lần vào trang</p>';
echo $msg;
?>
Bạn là vào truy cập 1 lần vào trang

Trong đoạn code trên có sử dụng if (session_id() === '') để kiểm tra xem Session có tồn tại hay chưa, nếu có rồi mà bạn gọi session_start() có thể PHP sẽ cảnh báo lỗi Warning

Hủy Session

  • Để hủy một biến nào đó lưu trữ trong Session thì dùng lệnh unset ví dụ unset($_SESSION['counter']);
  • Để hủy toàn bộ Session thì dùng lệnh session_destroy()

Cookie trong PHP

Cookie là mẩu tin nhỏ được lưu ở máy người dùng (cụ thể là tại Browser), Cookie sử dụng với mục đích để theo dõ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 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 nhin (như username) ...

Thiết lập 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, path, domain, security);
  • 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 tin
  • value giá trị gán cho cookie
  • expire Thời điểm hết hạn (hủy) của cookie
  • path đường dẫn thư mục mà cookie có hiệu lực. Sử dụng / cho biết cookie có hiệu lực ở mọi thư mục truy cập.
  • domain tên miền
  • security = 1 nếu sử dụng HTTPS

Ví dụ:


<?php
setcookie("name", "XUANTHULAB", time()+3600, "/","", 0);
?>

Truy cập 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ư Session bạn nên dùng isset() để kiểm tra sự tồn tại của COOKIE.


<?php
if( isset($_COOKIE["name"]))
    echo "Welcome " . $_COOKIE["name"] . "<br />";

else
    echo "Không có tên" . "<br />";
?>

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);

Vui lòng đăng ký ủng hộ kênh