1. Session trong PHP là gì?

Session cũng là một cách để lưu thông tin của người dùng trên nhiều trang. Session khác với cookie ở chỗ là session được lưu ở máy chủ thay vì được lưu ở máy người dùng.

Khi ta làm việc với một ứng dụng, ta mở nó ra, thao tác với nó và thực hiện những thay đổi và đóng nó lại. Máy tính biết bạn là ai. Nó biết khi nào bạn bắt đầu ứng dụng và khi nào bạn kết thúc. Nhưng trên internet có một vấn đề: máy chủ web không biết bạn là ai hoặc bạn làm gì, vì địa chỉ HTTP không duy trì trạng thái. Các biến session giải quyết vấn đề này bằng cách lưu trữ thông tin người dùng để sử dụng trên nhiều trang (ví dụ: tên người dùng, màu yêu thích, v.v.). Theo mặc định, các biến phiên kéo dài cho đến khi người dùng đóng trình duyệt.

Vì thế mà một session sẽ 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 web trong lần truy cập đó.

Đặc biệt mỗi client sẽ có một ID session khác nhau nên việc thông tin Session ở Client A bị ảnh hưởng qua Client B là điều không thể. Thông thường chúng ta sử dụng Session để lưu thông tin đăng nhập, giỏ hàng hoặc những dữ liệu mang tính chất tạm thời và mỗi client sẽ có dữ liệu khác nhau.

2. Bắt đầu một session trong PHP

Để bắt đầu một session ta dùng hàm session_start() . Hàm này sẽ kiểm tra xem một session đã được khởi tạo chưa và nếu chưa thì nó sẽ bắt đầu một session. Ta nên gọi hàm này ở đầu mỗi trang. Nếu ta include nhiều trang với nhau thì ta nên đặt nó ở file chính.

Biến session được đặt bằng biến toàn cục: $_SESSION và lưu trữ trong mảng kết hợp 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ụ: Ta sẽ tạo một file là demoss.php

Biến session được đặt bằng biến toàn cục PHP:

<?php
// bắt đầu session
session_start();
?>
<!DOCTYPE html>
<html>
<body> 
<?php
// Tạo biến session
$_SESSION["user_id"] = "TN123456";
$_SESSION["username"] = "BackBen123";
echo "Các biến session đã được tạo.";
?> 
</body>
</html>

3. Đọc giá trị biến session trong PHP

Ta sẽ tạo một file khác là demoss2.php và từ trang này chúng ta sẽ truy cập thông tin session mà chúng ta đã tạo ra trên trang đầu tiên.

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.

Ví dụ:

<?php
// bắt đầu session
session_start();
?>
<!DOCTYPE html>
<html>
<body> 
<?php
// hiển thị các biến session được tạo ở ví dụ trước
echo "user_id là: " . $_SESSION["user_id"] . "<br>";
echo "username là: " . $_SESSION["username"];
?> 
</body>
</html>

Một cách khác để hiển thị tất cả giá trị của session ta làm như sau:

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
print_r($_SESSION);
?>
</body>
</html>

Một câu hỏi nhỏ đặt ra là làm thế nào nó hoạt động, làm thế nào nó biết đây là tôi. Mình sẽ giải thích một cách sơ qua như sau: Hầu hết các phiên đặt khóa người dùng trên máy tính của người dùng trông giống như sau: 765487cf34ert8dede5a562e4f3a7e12. Sau đó, khi một phiên được mở trên một trang khác, nó sẽ quét máy tính để tìm khóa người dùng. Nếu có một kết quả phù hợp, nó sẽ truy cập vào phiên đó, nếu không, nó sẽ bắt đầu một phiên mới.

4. Lưu trữ session trong PHP

Tất cả Session được lưu trữ trong biến toàn cục $_SESSION, vì thể để lưu thêm dữ liệu Session hay là thay đổi dữ liệu của Session thì ta sẽ thao tác trên biến đó. Lưu ý với bạn trước khi dùng phép lấy giá trị Session bạn phải kiểm tra session đó có tồn tại không rồi hãy lấy.

Để lưu một giá trị mới vào Session ta dùng cú pháp như sau:$_SESSION['session_name'] = $session_value

Để lấy giá trị Session ta dùng cú pháp sau: $tenbien = $_SESSION['session_name'] Như mình đã đề cập ở trên trước khi bạn lấy giá trị Session bạn nên kiểm tra nó có tồn tại không rồi hãy lấy.

Ví dụ: tạo một file là demoss3.php

<?php 
session_start();
// Nếu click vào nút Lưu Session
if (isset($_POST['save-session']))
{
    // Lưu Session
    $_SESSION['name'] = $_POST['username'];
}
?>
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>
            <?php
            // Hiển thị thông tin lưu trong Session
            // phải kiểm tra có tồn tại không trước khi hiển thị nó ra
            if (isset($_SESSION['name']))
            {
                echo 'Tên Đăng Nhập Là: ' . $_SESSION['name'];
            }
            ?>
        </h1>
        <form method="POST" action="">
            <input type="text" name="username" value=""/> <br/>
            <input type="submit" name="save-session" value="Lưu Session"/>
        </form>
    </body>
</html>

Bạn hãy nhập tên vào sau đó nhấn vào button Lưu Sessoin. Sau đó bạn refresh lại trang. Bạn sẽ thấy thông tin bạn đã được lưu trữ trên Server nên có hiển thị ra.

5. Thêm, sửa session trong PHP

Để thêm hoặc session các bạn sử dụng cú pháp:

$_SESSION['name'] = 'value';

Trong đó:

  • name là tên của session.
  • value là giá trị của session, giá trị này có thể là một chuỗi,mảng,số,…

Ví dụ:

Thêm session:

<?php
$_SESSION['user'] = 'admin';
// hoặc đối với mảng
$array = [5, 8, 6, 4, 7, 5];
$_SESSION['user'] = $array;

Sửa session:

<?php
// khởi tạo session user có giá trị là laptrinhtudau
$_SESSION['user'] = 'laptrinhtudau';
// sửa giá trị của session user thành laptrinhtudau-er
$_SESSION['user'] = 'laptrinhtudau-er';

6. Xóa session trong PHP

Nếu ta muốn xóa một biến session duy nhất thì ta dùng hàm unset() .

Nếu bạn lại muốn xóa tất cả các biến session và hủy nó thì dùng hàm session_unset().

Ví dụ:

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// xóa tất cả các biến session
session_unset(); 
session_destroy(); 
print_r($_SESSION);
?>
</body>
</html>