Bài 32 - PHP basic buổi 11 - SESSION & COOKIE TRONG PHP

 



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");

}

?>

file 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>

file logout.php

<?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");

}

?>

file 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>

file logout.php


<?php
if($_SESSION["user"]){
session_start();
session_destroy();
header("location:login.php");
}
elseif($_COOKIE["user"]){
setcookie("user");
header("location:login.php");
}
else{
header("location:login.php");
}
?>

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");

}

?>

file login.php
<?php
ob_start();
session_start();
if($_POST["submit_name"]){
if($_POST["user"] == "admin" && $_POST["pass"] == "admin" && !$_COOKIE["log_end"]){
$_SESSION["user"] = "admin";
header("location:admin.php");
}
else{
if(!$_COOKIE["log_end"]){
if(!$_COOKIE["num_log"]){
setcookie("num_log", 2, time()+3600);
echo "<center style=\"color:red;\">Tài khoản không hợp lệ</center>";
echo "<center style=\"color:red;\">Số lần đăng nhập còn lại của bạn là <b>".$_COOKIE["num_log"]."</b> lần</center>";
}
else{
$_COOKIE["num_log"]--;
if($_COOKIE["num_log"] > 0){
$cookie_new = $_COOKIE["num_log"];
setcookie("num_log", $cookie_new, time()+3600);
echo "<center style=\"color:red;\">Tài khoản không hợp lệ</center>";
echo "<center style=\"color:red;\">Số lần đăng nhập còn lại của bạn là <b>".$_COOKIE["num_log"]."</b> lần</center>";
}
else{
setcookie("num_log");
setcookie("log_end", "30s", time()+30);
header("location:login.php");
}
}
}
}
}

?>
<!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"]){
if($_COOKIE["log_end"]){
echo "<center style=\"color:red;\">Bạn không thể đang nhập được trong vòng <b>".$_COOKIE["log_end"]."</b></center>";
}
?>
<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>

file logout.php
<?php
session_start();
if($_SESSION["user"]){
session_destroy();
header("location:login.php");
}
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