Ở bài 14 mình đã cho các bạn biết về khái niệm và cách thiết lập cookie trong PHP, tiếp tục series học PHP căn bản, sang bài này mình sẽ giới thiệu Session trong PHP là gì, hiểu nó và cách sử dụng nó như thế nào!
Session là một biến được sử dụng để lưu lại dữ liệu của người sử dụng website hoặc là lưu trữ tùy chọn cấu hình hệ thống cho người dùng. Không giống với cookie, biến session được lưu trên một tập tin trên máy chủ.
Các ứng dụng thường dùng đối với Session
- Session dùng theo dõi và kết nối giữa các phiên làm việc của người dùng
- Session dùng để tạo các ứng dụng giỏ hàng, đăng nhập,…
- Đếm số người dùng đang online,…
- Bạn muốn truyền giá trị từ trang này sang trang khác.
- Thay thế cho cookie nếu trình duyệt đó không hỗ trợ cookies.
Quy cách mà Session hoạt động
Khi một session bắt đầu, những điều sau sẽ xảy ra:
- Đầu tiên, PHP tạo một định danh duy nhất cho session cụ thể đó, định danh này là chuỗi kí tự ngẫu nhiên của 32 số hexa, như 3c7foj34c3jj973hjkop2fc937e3443.
- Một cookie được gọi là PHPSESSID sẽ được gửi tự động đến máy tính người dùng để lưu trữ chuỗi định danh session duy nhất ở trên.
- Một file được tạo tự động trên Server trong thư mục tạm thời đã được chỉ định và nó mang tên của định danh duy nhất và được bắt đầu bằng sess_. Ví dụ như: sess_3c7foj34c3jj973hjkop2fc937e3443.
Khi PHP script muốn lấy giá trị từ một biến session, PHP tự động lấy chuỗi định danh session duy nhất này từ PHPSESSID cookie, sau đó tìm file mang tên đó trong thư mục tạm thời của nó, một xác thực có thể được hoàn thành bằng việc so sánh các giá trị đó.
Một session kết thúc khi người dùng tắt trình duyệt hoặc sau khi rời khỏi site này, Server sẽ chấm dứt session sau một thời gian đã định trước, thường là 30 phút.
Đăng ký bắt đầu tạo một session
Trước khi bạn sử dụng session bạn phải khai báo cho PHP biết bằng cách đặt dòng lệnh session_start()
phía trên đầu mỗi file. Nếu bạn dùng nhiều file include lẫn nhau thì đặt nó ở file chính.
Đầu tiên hàm này kiểm tra một session đã được bắt đầu hay chưa, nếu chưa thì nó sẽ bắt đầu một session. Luôn nhớ rằng lời gọi hàm session_start() này được đề nghị đặt ở đầu của mỗi file (trước các thẻ html).
Các biến session được lưu trữ trong mảng liên hợp là $_SESSION[”]. Các biến này có thể được truy cập trong suốt vòng đời của một phiên session.
<?php // bắt đầu session (luôn đặt ở đầu file) session_start(); ?> <!DOCTYPE html> <html> <body> <?php // Tạo biến session $_SESSION["user_id"] = "123456"; $_SESSION["username"] = "tanhongit"; echo "Các biến session đã được tạo."; ?> </body> </html>
<?php //Start the session session_start(); ?> <!DOCTYPE html> <html> <body> <?php //Set session variables $_SESSION["favcolor"] = "green"; ?>
Lấy và đọc giá trị của Session trong PHP
Bạn hãy tạo 2 file có nội dung code bên dưới. Bạn hãy chạy làn lượt từng file trên trình duyệt và xem kết quả nhé!
Lưu ý rằng các biến session không được chuyển riêng lẻ đến từng trang mới, thay vào đó chúng được truy cập từ session mà chúng ta khai báo ở đầu mỗi trang (session_start()) và các giá trị biến session được lưu trữ trong biến toàn cầu $_SESSION:
<?php // bắt đầu session session_start(); ?> <!DOCTYPE html> <html> <body> <?php // Tạo biến session $_SESSION["user_id"] = "123456"; $_SESSION["username"] = "tanhongit"; echo "Các biến session đã được tạo."; ?> </body> </html>
<?php // bắt đầu session session_start(); ?> <!DOCTYPE html> <html> <body> <?php // hiển thị các biến session được tạo ở file session_demo1.php echo "user_id là: " . $_SESSION["user_id"] . "<br>"; echo "username là: " . $_SESSION["username"]; ?> </body> </html>
kết quả bạn sẽ thấy sau khi chạy lần lượt 2 file là thông tin của session được lưu lại:
user_id là: 123456 username là: tanhongit
Ngoài ra để tránh gặp lỗi, các bạn hãy nhớ luôn sử dụng hàm isset() để kiểm tra xem nó có tồn tại hay không rồi hẵn láy nhé! Ví dụ về hàm isset() mình đã có làm nhiều trong các bài viết trước rồi, và mình cũng sẽ có viết riêng 1 bài nói về hàm isset() cho các bạn tham khảo nhé!
Để in tất cả các biến session, sử dụng hàm print_r():
print_r($_SESSION);
Chỉnh sửa, thay đổi giá trị của biến Session trong PHP
Để thay đổi giá trị của một session, ta chỉ cần thiết lập giá trị mới đè lên giá trị cũ của session đó.
<?php // bắt đầu session session_start(); ?> <!DOCTYPE html> <html> <body> <?php $_SESSION["username"] = "tanhongitcom"; print_r($_SESSION); ?> </body> </html>
Kết quả: Array ( [user_id] => 123456 [username] => tanhongitcom )
Qua ví dụ dưới đây sẽ cho các bạn thấy rõ hơn về sự thay đổi giá trị của Session.
Ví dụ: Xuất ra số lần truy cập vào trang web thông qua session
<?php session_start(); if (isset($_SESSION['count'])) { $_SESSION['count'] += 1; } else { $_SESSION['count'] = 1; } $mess = "Bạn đã truy cập trang này " . $_SESSION['count'] . " lần trong session này."; ?> <html> <body> <?php echo ($mess); ?> </body> </html>
Sau khi bắt đầu 1 session, ta tạo 1 biến session có tên là count, tiếp tục với biểu thức điều kiện if sẽ kiểm tra số lần load vào trang này và xuất ra tổng số lần. Bạn thử load lại nhiều lần sẽ thấy giá trị của nó thay đổi lần lượt tăng thêm 1.
Các xoá, huỷ một session trong PHP
- Xóa tất cả biến session đã tạo ta sử dựng hàm session_unset()
- Xóa luôn toàn bộ session, ta sử dụng hàm session_destroy()
- Hoặc sử dụng hàm unset() để xóa một biến.
Trong đó hàm unset() dùng để giải phóng một biến ra khỏi bộ nhớ.
// Xóa session username unset($_SESSION['username']); // Xóa hết session session_destroy();
BÀI TẬP
- Xây dựng ứng dụng lưu phiên đăng nhập người dùng
- Xây dựng ứng dụng lưu thông tin giỏ hàng
Kết thúc
Vậy là qua bài viết trên mình đã giới thiệu cho các bạn về session, qua 2 bài vừa rồi nói về cookie, session là 2 khái niệm bạn sẽ phải đụng chạm rất nhiều vào các ứng dụng, các dự án sau này. Các bạn hãy áp dụng thật nhiều để nắm rõ cách sử dụng và hoạt động của nó nhé! Qua bài viết tiếp theo chúng ta sẽ qua một khái niệm mới về file và các hàm xử lý file trong PHP.
Xem thêm:
- Bài 7: Vòng lặp Foreach trong PHP (Các loại vòng lặp phần 2)
- Bài 8: lệnh Break, Continue và các hàm (function) exit, die thường dùng trong PHP
- Bài 11: Các hàm xử lý mảng (Array) trong PHP
- Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP
- Bài 13: Phương thức GET và POST trong PHP
- Bài 14: Cookie là gì? Cookie trong PHP
CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ