Tìm hiểu session trong PHP

Session có thể hiểu nôm na là dùng lưu giữ giá trị để các trang .php có thể "tương tác" với nhau, ví dụ trang 2 lấy biến từ trang 1 và ngược lại...

ĐĂNG KÝ SESSION:
Để bắt đầu session ta dùng hàm session_start(), hàm này ko có tham số. session sẽ ko tìm thấy các biến nếu chúng chưa được đăng ký bằng hàm session_register(CHUỖI), tham số CHUỖI là tên của session mà các trang dùng truy cập. Ta có thể đăng ký bao nhiêu session cũng được, tùy mục đích :)

Ta xét ví dụ sau:

session_start();
if (!isset($bien)) {
session_register("bien"); //Đăng ký session bien
$bien = 1; //gán giá trị cho session
}
Trang này được gọi < ?=$bien? > lần.

< ?
$bien ++;
? >


Kết quả: Trang này được gọi 1 lần. Nếu ta refresh thì giá trị $bien sẽ tăng lên 1,...

HỦY SESSION:
Session thường chỉ dùng trong vài trang, do đó ta nên hủy session để giải phóng tài nguyên.Để hủy 1 session, ta dùng hàm session_unregister(CHUỖI), với tham số CHUỖI là chuỗi biến mà ta dùng hàm session_register(CHUỖI) để đăng ký. Hàm session_unregister() ko xóa nội dung của biến session trong trang.Trước khi hủy session ta kiểm tra xem session đó có được đăng ký chưa, dùng hàm session_is_registered(CHUỖI)

if (session_is_registered("bien")) {
unset($bien); //xóa nội dung session
session_unregister
("bien"); //hủy session
}

Để hủy tất cả session, ta dùng hàm session_unset() ko tham số, hủy tất cả giá trị của session được đăng ký.

Xem minh họa ở đây: http://testphp.outlookmapi.com/session.php

Tuy nhiên cách trên ko "chạy" khi dùng PHP 5 (phiên bản tôi thử PHP 5.2.1), giờ ta đổi sang dùng $_SESSION vậy.
session_start();
if (!isset($_SESSION['bien'])) {
$_SESSION['bien'] = 1;
}
else {
$_SESSION['bien'] ++;
}

$_SESSION là tòan cục nên ta ko cần dùng từ khóa global khi muốn dùng biến tòan cục trong hàm.Với $_SESSION, ta ko cần dùng hàm session_register() để đăng ký, hủy session session_unregister() hay kiểm tra bằng hàm session_is_registered() . Chú ý: tên session phải bắt đầu bằng số họăc dấu gạch dưới (_).Hủy đăng ký 1 session bien, dùng unset()


unset($_SESSION['bien']);

p/s: Ở đây ko đề cập tới file cấu hình php, chỉ sử dụng mặc định register_global là Off, và session.auto_start cũng là Off.Ví dụ đếm số lần người dùng gọi lại 1 trang (refresh):

session_start();
if (!isset($_SESSION['so_lan_refresh'])) {
$_SESSION['so_lan_refresh'] = 1;
}
else {
$_SESSION['so_lan_refresh'] ++;
}
Số lần refresh là < ?=$_SESSION['so_lan_refresh'] ? > lan
123code :)

Comments

Anonymous said…
bai nay cung duoc do cu. keke