Session (phiên) là một cách để lưu trữ thông tin (trong các biến) sẽ được sử dụng trên nhiều trang.
Không giống như cookie, session không được lưu trữ trên máy tính của người dùng.
Khi bạn truy cập ứng dụng web bằng trình duyệt rồi thực hiện một số thay đổi nào đó và sau đó bạn đóng nó lại. Điều này giống như một session (phiên).
Một session tạo một file trong một thư mục tạm trên máy chủ nơi các biến session đã đăng ký và giá trị của chúng được lưu trữ ở đó. Dữ liệu này sẽ có sẵn cho tất cả các trang trên website trong lần truy cập đó.
Vị trí của file tạm được xác định bởi một cấu hình trong tệp php.ini có tên là session.save_path. Trước khi sử dụng bất kỳ biến session nào, hãy đảm bảo bạn đã thiết lập đường dẫn này.
Khi một session được bắt đầu những điều sau đây sẽ xảy ra:
Khi tập lệnh PHP muốn truy xuất giá trị từ biến session, PHP sẽ tự động lấy chuỗi số nhận dạng session từ cookie PHPSESSID và sau đó tìm file session trong thư mục tạm.
Một phiên kết thúc khi người dùng tắt trình duyệt hoặc sau khi rời khỏi trang web, máy chủ sẽ chấm dứt phiên sau một khoảng thời gian xác định trước, thường là 30 phút.
Một session PHP được bắt đầu dễ dàng bằng cách gọi hàm session_start()
. Hàm này trước tiên sẽ kiểm tra xem một session đã được bắt đầu chưa và nếu chưa thì nó sẽ bắt đầu một session. Bạn nên gọi hàm session_start()
ở đầu trang.
Các biến session được lưu trữ trong mảng kết hợp được gọi là $_SESSION[]
. Các biến này có thể được truy cập trong suốt vòng đời của session.
Ví dụ sau đây bắt đầu một session sau đó đăng ký hai biến favcolor và favanimal.
Đặt mã này vào tệp "demo_session1.php" và xem kết quả:
<?php
// Start the session
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Set session variables
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Session variables are set.";
?>
</body>
</html>
Đây là kết quả:
Session variables are set.
Lưu ý: Hàm session_start()
phải là được đặt ở đầu trang của bạn, trước bất kỳ thẻ HTML nào.
Tiếp theo, chúng tôi tạo một trang khác gọi là "demo_session2.php". Từ trang này, chúng tôi sẽ truy cập thông tin phiên chúng tôi đặt trên trang đầu tiên ("demo_session1.php").
Sử dụng hàm isset()
để kiểm tra xem biến session đã được thiết lập hay chưa.
Lưu ý rằng các biến session không được truyền riêng cho từng trang mới, thay vào đó chúng được truy xuất từ session chúng tôi mở ở đầu mỗi trang (session_start()
).
Cũng lưu ý rằng tất cả các giá trị biến session được lưu trữ trong biến toàn cục $_SESSION
:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
if (isset($_SESSION['favcolor']) && isset($_SESSION['favanimal'])) {
// Echo session variables that were set on previous page
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
}
?>
</body>
</html>
Đây là kết quả:
Favorite color is green.
Favorite animal is cat.
Một cách khác để hiển thị tất cả các giá trị biến phiên cho phiên người dùng là chạy mã sau:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
print_r($_SESSION);
?>
</body>
</html>
Đây là kết quả:
Array ( [favcolor] => green [favanimal] => cat )
Để cập nhật biến session trong PHP ta chỉ cần ghi đè lên nó như ví dụ dưới đây:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// to change a session variable, just overwrite it
$_SESSION["favcolor"] = "yellow";
print_r($_SESSION);
?>
</body>
</html>
Đây là kết quả:
Array ( [favcolor] => yellow [favanimal] => cat )
Nếu bạn muốn hủy một biến session duy nhất thì bạn có thể sử dụng hàm unset().
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
unset($_SESSION['favcolor']);
print_r($_SESSION);
?>
</body>
</html>
Đây là kết quả:
Array ( [favanimal] => cat )
Để xóa tất cả các biến session và hủy sesion, sử dụng hàm session_unset()
và session_destroy()
như sau:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// remove all session variables
session_unset();
// destroy the session
session_destroy();
print_r($_SESSION);
?>
</body>
</html>
Đây là kết quả:
Array ( )
Bạn không cần phải gọi hàm start_session()
ở đầu mỗi trang để bắt đầu session khi người dùng truy cập website của bạn nếu bạn thiết lập cấu hình session.auto_start thành 1 trong file php.ini.
Có thể có trường hợp người dùng không cho phép lưu trữ cookie trên máy của họ. Vì vậy, có một phương pháp khác để gửi Session ID tới trình duyệt. Đó là bạn sẽ nhúng Session ID vào URL.
Ví dụ sau minh họa cách đăng ký một biến session và liên kết chính xác đến một trang khác bằng SID.
<?php
session_start();
if (isset($_SESSION['counter'])) {
$_SESSION['counter'] = 1;
}else {
$_SESSION['counter']++;
}
$msg = "You have visited this page ". $_SESSION['counter'] . " in this session.";
echo ( $msg );
?>
<p>
To continue click following link <br />
<a href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>
Nó sẽ tạo ra kết quả sau:
You have visited this page 1 in this session.
To continue click following link
Hàm htmlspecialchars() được sử dụng để ngăn chặn các cuộc tấn công liên quan đến XSS.
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Hướng dẫn lập trình PHP toàn tập sẽ giúp bạn từng bước tìm hiểu và nắm vững ngôn ngữ lập trình PHP.
Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.
MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.
Hướng dẫn này sẽ giúp bạn tìm hiểu cách thêm dữ liệu vào MySQL sử dụng MySQLi và PDO trong PHP.