Session trong PHP nói về sử dụng session trong lập trình php – vùng nhớ trên server dùng để chia sẻ biến giữa các trang php trong website.
Session trong PHP
- Giới thiệu về session trong PHP
- Khởi động session
- Lưu một giá trị vào session
- Lấy ra một giá trị từ session
- Hủy bỏ session
- Lấy id session của user
- Phát sinh session id mới
- Start session 2 lần bị lỗi
- Kiểm tra tồn tại session start chưa
- Tham khảo thêm
Giới thiệu về session trong PHP
Session trong PHP là nơi chứa các biến có thể dùng chung giữa nhiều trang .php. Nghĩa là trong một file .php nào đó bạn lưu một giá trị vào session thì các trang .php khác cũng có thể truy xuất được giá trị này.
Session là vùng nhớ nằm trên server, đây là nơi bạn dùng để nơi chia sẻ data giữa các trang php trong website. Vì công dụng của nó như vừa nên ở trên: một trang php lưu giá trị vào thì các trang khác cũng dùng được.
Session khác với cookie ở chỗ vị trí của nó là “trên server”. Cookie cũng là nơi chia sẽ data giữa các trang php nhưng vị trí lưu là trong trình duyệt (ở phía client).
Mỗi user request lên server sẽ được tạo 1 vùng session riêng để lưu các giá trị mà không ảnh hưởng đến user khác. Nghĩa là hiện tại nếu có 100 xem website thì sẽ có 100 vùng session dành cho 100 user đó. Mặc định, session của mỗi user tồn tại trên server trong thời gian 1440s kể từ lần cuối cùng mà user request lên server.
Khởi động session
Dùng hàm sau ở đầu trang php để khởi tạo session
<?php session_start() ; ?>
Có dùng hàm này thì bạn mới có thể lưu giá trị vào session hoặc lấy ra giá trị từ session mới được.
Lưu một giá trị vào session
Để lưu một giá trị vào session thì dùng cú pháp $_SESSION[‘tên’] = giá trị; Ví dụ:
<?php //test1.php session_start(); $_SESSION['username'] = 'teonv'; $_SESSION['user'] = ['id'=>2, 'email'=>'teo@abc.vn', 'pass'=>'123']; ?>
Một khi đã lưu vào session, các trang php khác có thể truy xuất được các giá trị đã lưu miển đường quá hạn session (1440s) và đừng đóng tag của trinh duyệt.
Lấy ra một giá trị từ session
Để lấy ra một giá trị từ session thì dùng cú pháp $_SESSION[‘tên’]; Ví dụ:
<?php //test2.php session_start(); $un = $_SESSION['username']; $user = $_SESSION['user']; echo $un, "<br>"; // teonv var_export($user);//[id=>2, email=>'teo@abc.vn', pass=>'123'] ?>
Hủy bỏ session
Để hủy session của 1 user, bạn dùng hàm session_destroy(); Ví dụ
<?php //thoat.php session_start(); session_destroy() ; ?>
Khi 1 user nào đó request trang thoat.php như vú dụ trên thì vùng session của user đó sẽ bị hủy, các biến session trong đó bị xóa. Còn session của các user khác không ảnh hưởng gì
Lấy id session của user
Mỗi vùng session của user được php cấp phát một giá trị id lúc chạy hàm session_start. Để lấy giá trị id này thì bạn dùng hàm session_id();
<?php //test3.php session_start(); // … echo $id = session_id() ; //bot567faifjbhq4hr1l7cpsuqg ?>
Giá trị session_id có thể xem trong trình duyệt cũng được. Vào Developer Toolbox => tab Application => chọn mục Cookies => chọn domain của website => sẽ thấy biến cookie có tên PHPSESSID, giá trị của biến này là session_id. (hình dưới)
Phát sinh session id mới
Khi cần phát sinh id khác cho vùng nhớ session, thì dùng hàm session_regenerate_id . Ví dụ
<?php //test3.php session_start(); // … echo $id = session_id() ; //g9comlnurf5t4fvvb1vrh05uuk echo "<br>"; session_regenerate_id(); echo $id = session_id() ; //3jdghs083o45282b5lnonq958u ?>
Phát sinh lại id để tăng thêm tính bảo mặt cho website, tránh tình trạng iuser bị chôm id bởi hacker, nhờ đó bảo vệ người dùng thêm an toàn. Nhất là nhữnng website đòi hỏi tính bảo mật cao.
Start session 2 lần bị lỗi
Không được start session từ 2 lần trở lên, chỉ start đúng một lần trong trang web thôi . Đây là lỗi bạn thường hay gặp khi dùng session: start nhiều lần hoặc không start lần nào.
Lỗi start 2 lần session
– Trong cùng 1 trang
<?php //test5.php session_start(); //... //... session_start(); ?>
– Start 1 lần ở trang chính và một lần ở trang con
<?php //test5.php session_start(); //... include "sanpham.php"; ?>
<?php //sanpham.php session_start(); //… ?>
Lỗi dùng session mà không start
<?php //doipass.php $un = $_SESSION['username']; //lỗi ?>
Kiểm tra tồn tại session start chưa
Session start nhiều lần bị lỗi, để an toàn bạn có thể dùng hàm session_start xem có start hay chưa. Nếu chưa thì mới start, còn nếu session đã start rồi thì thôi. Xem cú pháp như sau:
if (session_status() === PHP_SESSION_NONE) session_start();
Tham khảo thêm
- https://www.w3schools.com/php/php_sessions.asp
- https://www.php.net/manual/en/book.session.php
- https://longnv.name.vn/on-tap-web/on-tap-kien-thuc-php