LAB PHP (CB) 11
SESSION VÀ COOKIE TRONG PHP
A – LÝ THUYẾT
I – LÀM VIỆC VỚI SESSION
1 – Định nghĩa Session
Session được hiểu
là khoảng thời gian mà người dùng giao tiếp với một ứng dụng bất kỳ hay còn gọi
là một phiên làm việc
Một session được
bất đầu khi người dùng truy cập vào ứng dụng lần đầu tiên và kết thúc khi người
dùng thoát ra khỏi ứng dụng
Mỗi một session hay một phiên làm việc thì được cấp một ID và được lưu trong thư mục thiết lập, trong file php.ini (với tham số session.save_path)
2 – Làm việc với Session
a)
Khai báo phiên làm việc với
Session
Để sử dụng hay bắt đầu làm việc với session ta sử dụng
cú pháp session_start()
Chú ý: Cú pháp
này phải nằm trên tất cả các kịch bản HML cũng như các lệnh in ra màn hình như
echo(); print(),…
b) Khởi tạo một Session
Sau khi đã khai báo một phiên làm việc thì tiếp theo
chúng ta phải khởi tạo một Session với việc đăng ký một Session Name với cú
pháp đăng ký như sau
c)
Làm việc với Session
Sau khi đã đăng ký thành công một Session việc tiếp theo
đó là khởi tạo cho Session đó một giá trị mà chúng ta mong muốn với cú pháp như
sau:
Để hiểu rõ hơn về Session chúng ta tiến hành xem xét một
ví dụ như sau:
Ví dụ:
Khởi tạo trang dangky_session.php
với nội dung như sau:
Khởi tạo trang thucthi_session.php
với nội dung như sau:
Đầu tiên tiến hành chạy file dangky_session.php để đăng ký một Session Name, sau đó chạy file thucthi_session.php để xem kết quả.
Chú ý: Nhiều khi chúng ta có thể bỏ qua
bước khởi tạo Session và tiến hành gán giá trị cho $_SESSION[“session_name”]
luôn cũng được
d) Hủy bỏ một hoặc nhiều Session đã khai báo
Để hủy bỏ một Session đã khai báo trước đó chúng ta sử
dụng cú pháp sau:
Nếu muốn hủy tất cả các Session đã khai báo chúng ta sử
dụng một cú pháp khác như sau:
II – LÀM VIỆC VỚI COOKIE
1 – Định nghĩa Cookie
Cookie là một đoạn
dữ liệu được lưu vào đĩa cứng hoặc bộ nhớ của máy người sử dụng. Nó được trình
duyệt gửi ngược lên Server mỗi khi Browser tải một trang web từ Server.
Những thông tin
được lưu trữ trong cookie hoàn toàn phụ thuộc vào website trên server.
Cookie được tạo ra
bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host
trên 1 server) sẽ có 2 cookie khác nhau gởi tới browser.
Ngoài ra, mỗi
browser quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 browser
cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau
2 – Làm việc với Cookie
a)
Thiết lập Cookie
Để thiết lập một Cookie chúng ta sử dụng cú pháp sau
đây:
·
Name: Tên của Cookie
·
Value: Giá trị của Cookie
·
Time Live: Thời gian sống của Cookie
Chú ý: Hàm setcookie() phải được đặt trên tất cả các kịch bản HTML cũng như các thẻ in ra màn hình như echo, print,…
b) Sử dụng Cookie
Sau khi thiết lập được Cookie, để có thể lấy giá trị của
Cookie đã được thiết lập ở trước đó chúng ta sử dụng cú pháp sau:
Để hiểu rõ hơn về cách thức làm việc với Cookie chúng ta
tiến hành xem xet một ví dụ sau:
Ví dụ:
Khởi tạo file dangky_cookie.php
để khai báo một biến Cookie có thời gian sống là 1h (được tính là 3600s)
Khởi tạo file thucthi_cookie.php
để nhận giá trị của Cookie Name đã khai báo ở trên
Sau 1h tức là 3600s, chúng ta tiến hành thực thi lại trang thucthi_cookie.php sẽ không thấy giá trị trả về bởi khi này Cookie đã hết hạn sử dụng
c)
Hủy bỏ Cookie
Hủy Cookie bằng cách khởi tạo đè cookie name và không truyền các tham số khác vào
Hủy Cookie bằng cách khởi tạo lại cookie để Time Live
(thời gian sống) <= 0
B – BÀI TẬP
I – BÀI TẬP THỰC HÀNH
1 – Lý thuyết bổ sung
Trong phần này chúng ta có sử dụng một hàm mới để thực
hiện chức năng chuyển trang đó là hàm header() trong PHP
Cú pháp:
header(“location:đường dẫn muốn chuyển tới”)
Chú ý: Hàm header() này cần phải đứng trên
tất cả các kịch bản HTML cũng như các hàm xuất nội dung trong PHP như print(),
echo(),… tương tự như session_start(). Nhưng nếu muốn hàm header() nằm dưới các
kịch bản HTML cũng như các hàm xuất dữ liệu mà không bị báo lỗi thì chúng ta có
một cách khắc phục như sau. Đó là sử dụng một hàm ob_start() không có tham số
để đặt ngay trên cùng của trang thực thi.
2 – Bài tập
Bài 1:
Xây dựng ứng dụng Login và Logout với các yêu cầu như
sau:
- Tạo trang login.php để chứa Form
login và xử lý quá trình login
- Tạo trang admin.php chứa một đoạn
nội dung bất kỳ để khi quá trình login thành công thì hệ thống sẽ tự động
chuyển người dùng qua trang này và hiển thị nội dung đó
- Khi người dùng đã đăng nhập thành
công thì không thể nào truy cập vào được trang login.php cũng như là quay
lại được trang này
- Ở trang admin.php tạo một Link
logout. Nếu người dùng lựa chọn logout sẽ đưa tới trang logout để xử lý
logout đồng thời chuyển người dùng tới trang login.php và khi này thì
trang admin.php cũng như trang logout.php đều không thể truy cập vào được
Chú ý: Chạy thử đáp án bài 1 dưới cuối trang để hiểu chính xác hoạt động của ứng dụng
II – BÀI TẬP VỀ NHÀ
Bài 2:
Thực hiện xây dựng ứng dụng Login và Logout tương tự như
trên nhưng có thêm chức năng cho phép ghi nhớ tài khoản và mật khẩu đăng nhập
như sau:
- Khi người dùng lựa chọn vào ô
checkbox này thì nhưng lần truy cập sau, họ không cần phải đăng nhập
- Nếu người dùng không lựa chọn tính
năng này thì sau khi tắt trình duyệt họ vẫn phải đăng nhập lại từ đầu
Chú ý: Chạy thử đáp án bài 2 cuối trang để hiểu chính xác hoạt động của ứng dụng
Bài 3:
Thực hiện xây dựng ứng dụng Login và Logout tương tự như
Bài 1. nhưng có bổ sung thêm tính năng sau:
- Nếu người dùng đăng nhập sai 3 lần
thì sẽ bị cấm đăng nhập trong vòng 30 phút (test thử 30s trước)
- Mỗi một lần đăng nhập sai sẽ có
thông báo đăng nhập sai và kèm theo số lần được phép đăng nhập còn lại
Chú ý: Chạy thử đáp án bài 3 cuối trang để hiểu
chính xác hoạt động của ứng dụng
Đáp án:
Bài 1:
file admin.php
<?php
session_start();
if($_SESSION["user"]){
echo "Xin chao Admin da dang nhap thanh cong! <a href=\"logout.php\">Logout</a>";
}
else{
header("location:login.php");
}
?>
<?php
ob_start();
session_start();
if($_POST["submit_name"]){
if($_POST["user"] == "admin" && $_POST["pass"] == "admin"){
$_SESSION["user"] = "admin";
header("location:admin.php");
}
else{
echo "<center style=\"color:red;\">Tài khoản không hợp lệ</center>";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<?php
if(!$_SESSION["user"]){
?>
<form method="post">
<table align="center" border="1" cellspacing="1" cellpadding="1">
<tr>
<td align="center" colspan="2">Đăng nhập hệ thống quản trị</td>
</tr>
<tr>
<td>Tài khoản</td>
<td><input type="text" name="user" /></td>
</tr>
<tr>
<td>Mật khẩu</td>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit_name" value="Đăng nhập" /> <input type="reset" name="reset_name" value="Làm mới" /></td>
</tr>
</table>
</form>
<?php
}
else{
header("location:admin.php");
}
?>
</body>
</html>
<?php
session_start();
if($_SESSION["user"]){
session_destroy();
header("location:login.php");
}
else{
header("location:login.php");
}
?>
Bài 2:
file admin.php
<?php
session_start();
if($_SESSION["user"] or $_COOKIE["user"]){
echo "Xin chao Admin da dang nhap thanh cong! <a href=\"logout.php\">Logout</a>";
}
else{
header("location:login.php");
}
?>
<?php
ob_start();
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<?php
if($_POST["submit_name"]){
if($_POST["user"] == "admin" && $_POST["pass"] == "admin"){
if($_POST["check"] == "ok"){
setcookie("user", "admin", time()+3600);
}
else{
$_SESSION["user"] = "admin";
header("location:admin.php");
}
}
else{
echo "<center style=\"color:red;\">Tài khoản không hợp lệ</center>";
}
}
if(!$_SESSION["user"] or !$_COOKIE["user"]){
?>
<form method="post">
<table align="center" border="1" cellspacing="1" cellpadding="1">
<tr>
<td align="center" colspan="2">Đăng nhập hệ thống quản trị</td>
</tr>
<tr>
<td>Tài khoản</td>
<td><input type="text" name="user" /></td>
</tr>
<tr>
<td>Mật khẩu</td>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<td>Ghi nhớ tài khoản</td>
<td><input type="checkbox" name="check" value="ok" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit_name" value="Đăng nhập" /> <input type="reset" name="reset_name" value="Làm mới" /></td>
</tr>
</table>
</form>
<?php
}
else{
header("location:admin.php");
}
?>
</body>
</html>
Bài 3:
file admin.php
<?php
session_start();
if($_SESSION["user"]){
echo "Xin chao Admin da dang nhap thanh cong! <a href=\"logout.php\">Logout</a>";
}
else{
header("location:login.php");
}
?>
>>Xem bài trước: Bài 31 - PHP basic buổi 10 - QUY TRÌNH DOWNLOAD FILE TRONG PHP
>>Xem bài tiếp theo: Bài 33 - MYSQL PHẦN I - DESIGN CSDL
No comments:
Post a Comment