Tìm hiểu về Session và Cookies

Seesion và Cookies là gì? thường được sử dụng làm gì?

Session và Cookies là hai cơ chế quan trọng trong phát triển web để lưu trữ thông tin trạng thái và theo dõi người dùng trên các trang web. Dưới đây là mô tả cụ thể về mỗi loại:

Session:

  • Session là một cơ chế lưu trữ thông tin trạng thái trên máy chủ. Mỗi phiên làm việc của người dùng sẽ có một session tương ứng được tạo và duy trì trên máy chủ.
  •  Session được sử dụng để lưu trữ thông tin như thông tin đăng nhập của người dùng, giỏ hàng trong một cửa hàng trực tuyến, cài đặt ngôn ngữ, v.v.
  • Thông tin session được lưu trữ trên máy chủ, và một ID session duy nhất được gửi đến trình duyệt của người dùng thông qua cookie hoặc URL.
  • Session thường được sử dụng cho các ứng dụng cần bảo mật cao vì thông tin session không được lưu trữ trên máy khách và không thể thay đổi từ phía người dùng.

Cookies:

  • Cookies là các dữ liệu nhỏ được lưu trữ trên máy tính của người dùng thông qua trình duyệt web.
  • Cookies thường được sử dụng để theo dõi và nhận biết người dùng, lưu trữ thông tin trạng thái như ngôn ngữ hoặc cài đặt trang web, giữ người dùng đăng nhập, theo dõi hoạt động trên trang web, và cung cấp quảng cáo cá nhân hóa.
  • Có hai loại cookies: cookies phiên và cookies vĩnh viễn. Cookies phiên tồn tại chỉ trong phiên làm việc hiện tại của trình duyệt và sẽ bị xóa khi trình duyệt đóng. Cookies vĩnh viễn tồn tại trên máy tính của người dùng cho đến khi hết hạn hoặc được xóa bởi người dùng hoặc máy chủ.

Ví dụ đơn giản về seesion và cookies

Ví dụ về Session:

Tạo file index.php như sau:
<?php
// Bắt đầu session
session_start();
// Thiết lập giá trị cho session
$_SESSION['username'] = 'nguyen_van_a';
echo "Session đã được thiết lập.";
?>
Tạo trang profile.php để lấy giá trị được tạo bởi session:
<?php
// Bắt đầu session
session_start();
// Kiểm tra xem session đã được thiết lập chưa
if(isset($_SESSION['username'])) {
echo "Xin chào, " . $_SESSION['username'] . "!";
} else {
echo "Bạn chưa đăng nhập.";
}
?>
Kết quả là sau khi bạn chạy file index.php và bạn vào trang profile.php sẽ nhận được kết quả là: Xin chào, nguyen_van_a!

Ví dụ về Cookies:

Tạo trang set_cookie.php có nội dung sau để lưu giá trị vào máy client:
<?php
// Thiết lập cookie với tên là "user" và giá trị là "nguyen_van_b"
setcookie("user", "nguyen_van_b", time() + (86400 * 30), "/"); // 86400 = 1 ngày
echo "Cookie đã được thiết lập.";
?>
Tạo trang get_cookie.php để lấy giá trị được lưu trong máy client:
<?php
// Kiểm tra xem cookie có tồn tại không
if(isset($_COOKIE['user'])) {
   echo "Xin chào, " . $_COOKIE['user'] . "!";
} else {
   echo "Chào mừng bạn đến với trang web!";
}
?>
Kết quả là sau khi bạn chạy file set_cookie.php và bạn vào trang get_cookie.php sẽ nhận được kết quả là: Xin chào, nguyen_van_b!

Thời gian sống của 1 seesion là bao lâu và thiết lập thời gian cho 1 seesion

Thời gian tồn tại của một session trong PHP mặc định là 24 phút (1440 giây). Tuy nhiên, bạn có thể thiết lập thời gian cho một session bằng cách sử dụng hàm session_set_cookie_params() hoặc thông qua cấu hình trong tệp php.ini.

Sử dụng session_set_cookie_params():

// Bắt đầu session
session_start();
// Thiết lập thời gian của session là 1 giờ (3600 giây)
session_set_cookie_params(3600);
// Thiết lập giá trị cho session
$_SESSION['username'] = 'nguyen_van_a';
Trong ví dụ trên, chúng ta đã thiết lập thời gian của session là 1 giờ bằng cách sử dụng session_set_cookie_params() với đối số là số giây (3600 giây tương ứng với 1 giờ). Bất kỳ session nào được bắt đầu sau đó sẽ có thời gian sống là 1 giờ kể từ khi được thiết lập.

Cấu hình trong tệp php.ini:

Bạn cũng có thể cấu hình thời gian của session trực tiếp trong tệp php.ini. Mở tệp php.ini và tìm dòng có tên là session.gc_maxlifetime. Đây là thời gian sống tối đa của một session trong giây. Bạn có thể thiết lập giá trị cho dòng này để định rõ thời gian sống của session. Sau khi chỉnh sửa xong, bạn cần khởi động lại máy chủ web của bạn để thay đổi có hiệu lực.
xampp control php ini
Bạn vào Xampp Control, dòng Apache, chọn mục Config và bấm chọn PHP.ini
php-ini-maxlifetime
Thay đổi giá trị tại dòng session-gc_maxlifetime và lưu file lại. Sau đó tắt máy chủ Apache và bật lại

Đóng phiên làm việc của Session:

Để đóng phiên làm việc của session khi không cần sử dụng nữa hoặc khi người dùng logout, bạn có thể sử dụng hàm session_destroy().
// Bắt đầu session
session_start();
// Xóa toàn bộ session
session_destroy();
Khi bạn gọi session_destroy(), tất cả các session hiện tại sẽ bị xóa và không còn sẵn có nữa.

Đóng phiên làm việc của Cookies:

Để đóng phiên làm việc của cookies, bạn có thể đặt thời gian sống của chúng thành một thời điểm trong quá khứ, điều này sẽ khiến cho trình duyệt xem như đã hết hạn và xóa chúng.
// Thiết lập thời gian sống của cookie là 1 giây trước
setcookie("user", "", time() - 1, "/");
Trong trường hợp này, cookie “user” sẽ được đặt thời gian sống là một giây trước thời điểm hiện tại, khiến cho trình duyệt xóa cookie này ngay lập tức khi nhận được yêu cầu từ máy chủ. Điều này có thể được sử dụng khi người dùng logout, để xóa cookie và đóng phiên làm việc của họ.

Với các trang web được làm bởi cookies có thay thế bằng seesion được không?

Có thể thay thế giữa seesion và cookies được. Ví dụ bạn có thể sửa đổi từ cookies sang session để lưu trữ thông tin của giỏ hàng và đơn hàng trong các trang cart.php, add_to_cart.php, process_order.php, remove_product.php, checkout.php, và products.php. Sử dụng session thay vì cookies có một số ưu điểm như sau:

  1. Bảo mật cao hơn: Thông tin được lưu trữ trong session không được lưu trữ trên máy khách (trình duyệt), điều này làm giảm nguy cơ về bảo mật so với việc lưu trữ thông tin trong cookies.
  2. Không phụ thuộc vào trình duyệt: Session không phụ thuộc vào việc người dùng có bật cookie hay không. Do đó, không có rủi ro nào về việc mất dữ liệu nếu người dùng tắt cookies trên trình duyệt của họ.
  3. Dễ dàng quản lý: Session được quản lý bởi máy chủ, điều này làm cho việc thêm, sửa đổi hoặc xóa dữ liệu session trở nên dễ dàng hơn so với cookies.

Dưới đây là cách thực hiện sửa đổi từ cookies sang session:

  1. Thay vì sử dụng setcookie() để lưu trữ thông tin giỏ hàng và đơn hàng, bạn sẽ sử dụng $_SESSION để thiết lập và truy cập các biến session.
  2. Sử dụng $_SESSION[‘key’] để lưu trữ thông tin và unset($_SESSION[‘key’]) để xóa thông tin từ session.
  3. Đảm bảo rằng bạn đã bắt đầu session bằng cách sử dụng session_start() ở đầu của mỗi trang sử dụng session.

Ảnh dưới đây là một ví dụ cơ bản về cách sử dụng session thay vì cookies trong các trang liên quan đến giỏ hàng và đơn hàng.

chuyển đổi giữa session và cookies
Nhìn ảnh trên, ta thấy cùng một nội dung xử lý thì viết bằng seesion sẽ gọn hơn so với cookies. Còn yêu cầu về hiệu năng sẽ đánh giá sau.

Một vài ví dụ về Seesion và Cookies:

Đếm số lượt truy cập website bằng seesion

Dưới đây là một ví dụ đơn giản về cách sử dụng session để đếm số lượt truy cập trang web:

<?php
session_start();
// Kiểm tra xem session 'visits' đã được thiết lập chưa
if(isset($_SESSION['visits'])) {
// Nếu session đã tồn tại, tăng giá trị lượt truy cập lên 1
   $_SESSION['visits']++;
} else {
// Nếu session chưa tồn tại, thiết lập giá trị lượt truy cập là 1
  $_SESSION['visits'] = 1;
}
// Hiển thị số lượt truy cập
echo "Số lượt truy cập: " . $_SESSION['visits'];
?>

Trong ví dụ này:

  • Chúng ta bắt đầu session bằng cách sử dụng session_start().
  • Chúng ta kiểm tra xem session ‘visits’ đã được thiết lập hay chưa. Nếu đã tồn tại, chúng ta tăng giá trị lượt truy cập lên 1. Nếu chưa tồn tại, chúng ta thiết lập giá trị lượt truy cập là 1.
  • Sau đó, chúng ta hiển thị số lượt truy cập bằng cách truy cập vào session ‘visits’.

Mỗi khi người dùng truy cập trang web, số lượng lượt truy cập sẽ được tăng lên. Session ‘visits’ sẽ lưu trữ thông tin này trong suốt phiên làm việc của người dùng.

Sử dụng Cookies để tạo trang thông tin bán hàng

Trong ví dụ này, sẽ sử dụng Cookies để tạo trang cart.php, add_to_cart.php, process_order.php, remove_product.php, checkout.php, và products.php ở dạng đơn giản. Xem chi tiết về sử dụng cookies để tạo trang bán hàng tại đây.

Sử dụng Session để tạo trang đăng nhập và đăng xuất

Trong ví dụ này, sẽ sử dụng Session để tạo trang đăng nhập, nếu kiểm tra thông tin đăng nhập là đúng và chuyển đến trang tổng quan khi đăng nhập thành công. Xem chi tiết về sử dụng session để tạo trang đăng nhập tại đây.

Tóm lại, Session và Cookies là hai công cụ quan trọng trong phát triển web để lưu trữ thông tin trạng thái và theo dõi người dùng trên các trang web. Mỗi loại có các ưu điểm và ứng dụng riêng, và việc lựa chọn giữa Session và Cookies phụ thuộc vào yêu cầu cụ thể của ứng dụng và bảo mật.