-----
Phần 89. Cookie
Đây là clip số 104:
- Cookie được sử dụng để lưu trữ dữ liệu người dùng trên máy
client.
- Mỗi trình duyệt trên máy client có một vùng nhớ cookie
riêng, vì vậy nếu dùng hai trình duyệt truy cập vào cùng một website thì sẽ có
hai cookie khác nhau.
Để tạo cookie, sử dụng hàm:
setcookie($name, $value, $time)
- $name: tên cookie
- $value: giá trị gán cho $name
- $time: thời gian tồn tại của cookie $name
Ví dụ,
<?php
setcookie('myCookie','my
test', time() + 60); //thời gian tồn tại là 1 phút
?>
Sau khi chạy đoạn mã trên, vào xem giá trị của cookie vừa
lưu, trong trình duyệt chrome:
- Mở menu ở góc trên, bên phải của trình duyệt
- Vào mục Settings, bấm tiếp vào mục Advanced ở cuối màn
hình
- Trong mục Privacy and security, chọn mục Content settings,
chọn tiếp mục Cookies
- Chọn mục See all cookies and site data, các cookie sẽ được
sắp xếp tăng theo tên của trang web. Có thể xóa tất cả cookie bằng nút REMOVE
ALL, sau đó chạy lại đoạn mã PHP, để tìm cookie dễ hơn.
Để truy cập cookie, sử dụng biến $_COOKIE
Ví dụ,
setcookie('myCookie','my test', time() + 60); //thời gian tồn tại
là 1 phút
echo '<pre>';
print_r($_COOKIE);
echo '</pre>';
Hoặc,
setcookie('myCookie','my
test', time() + 60); //thời gian tồn tại là 1 phút
echo '<pre>';
print_r($_COOKIE['myCookie']);
echo '</pre>';
Để xóa cookie, sử dụng một trong hai hàm sau:
- setcookie($name), với $name là tên cookie muốn xóa
- setcookie($name, $value, $time), với $time thuộc về quá
khứ
Ví dụ,
setcookie('myCookie','my test', time() + 20);
setcookie('myCookie');
echo '<pre>';
print_r($_COOKIE);
echo '</pre>';
Ví dụ,
setcookie('myCookie','my test', time() + 20);
setcookie('myCookie',
'abc', time() - 1);
echo '<pre>';
print_r($_COOKIE);
echo '</pre>';
Bài tập: khi truy cập vào trang web, hãy xuất thời gian đăng
nhập của lần gần đây nhất. Đây là đoạn mã,
echo 'Xin chào!' .
'<br>';
if
(isset($_COOKIE['lastLogin'])) {
$time =
$_COOKIE['lastLogin'];
echo 'last login: ' .
date('d/m/Y H:i:s', $time);
setcookie('lastLogin',time());
} else {
setcookie('lastLogin',time(), time() + 3600);
}
Bài tập:
- Kiểm tra thông tin đăng nhập của người dùng, nếu khớp với
thông tin người dùng trong tập tin users.ini thì tạo cookie lưu lại thông tin
đăng nhập.
- Sau khi người dùng đăng nhập thành công, duy trì việc đăng
nhập này trong 20 giây, quá thời gian này, tự động đăng xuất người dùng.
[index.php]
<!DOCTYPE html>
<html lang="en">
<head>
<meta
charset="UTF-8">
<title>Document</title>
<link
href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div
class="container">
<?php
if (isset($_COOKIE['fullname']))
{
echo '<h3> Xin
chào: ' . $_COOKIE['fullname'] . '</h3>';
echo '<a
href="logout.php">Đăng xuất</a>';
} else {
?>
<h3
class="text-center">Login</h3>
<div
class="row">
<div
class="col-md-4 col-md-offset-4">
<form
action="process.php" method="post">
<div
class="form-group">
<label
for="username">Username</label>
<input
type="text" id="username"
name="username"class="form-control">
</div>
<div
class="form-group">
<label
for="password">Password</label>
<input
type="password" id="password" name="password"
class="form-control">
</div>
<button
type="submit" class="btn btn-primary">Đăng
nhập</button>
</form>
</div>
</div>
<?php
}
?>
</div>
</body>
</html>
[process.php]
<h3 class="text-center">process</h3>
<?php
// kiểm tra dữ liệu khác
rỗng
function
checkEmpty($value) {
$flag = false;
if (!isset($value) ||
trim($value) == '') {
$flag = true;
}
return $flag;
}
if
(isset($_COOKIE['fullname'])) {
echo '<h3> Xin
chào: ' . $_COOKIE['fullname'] . '</h3>';
echo '<a
href="logout.php">Đăng xuất</a>';
} else {
if
(!checkEmpty($_POST['username']) && !checkEmpty($_POST['password'])) {
$username =
$_POST['username'];
$password =
md5($_POST['password']);
$data =
parse_ini_file('users.ini');
if
(array_key_exists($username, $data)) {
$userInfo = explode
('|', $data[$username]);
if ($username ==
$userInfo[0] && $password == $userInfo[1]) {
setcookie('fullname', $userInfo[2], time() + 200);
echo '<h3>
Xin chào: ' . $userInfo[2] . '</h3>';
echo '<a
href="logout.php">Đăng xuất</a>';
} else {
header('location:index.php');
}
}else {
header('location:index.php');
}
} else {
// die('test');
header('location:index.php');
}
}
?>
[logout.php]
<?php
setcookie('fullname');
header('location:index.php');
?>
[users.ini]
teo = "teo|c4ca4238a0b923820dcc509a6f75849b|Nguyen Van
Teo"
ti = "ti|c81e728d9d4c2f636f067f89cc14862c|Tran Van Ti"
So sánh session và cookie:
Session
|
Cookie
|
Lưu dữ liệu tại server
|
Lưu dữ liệu tại client
|
Bị xóa khi người dùng đóng trình duyệt
|
Bị xóa khi hết thời gian tồn tại
|
Bảo mật hơn do lưu trên server
|
Dễ bị chỉnh sửa, do tồn tại trên máy của người dùng
|
-----------
Cập nhật [8/1/2018]
-----------
Xem thêm: