-----
Phần 88.
Bài tập về session
Đây là clip số 102:
Lưu lại thông tin đăng nhập của người dùng vào session trong
một khoảng thời gian, ví dụ 20 giây. Trong khoảng thời gian 20 giây này, người
dùng có thể thực hiện mọi thao tác. Khi hết thời gian 20 giây, thông tin đăng
nhập của người dùng trong session sẽ bị xóa.
Tạo giao diện,
[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">
<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>
</div>
</body>
</html>
Tập tin users.txt sẽ chứa tên đăng nhập, mật khẩu và tên đầy
đủ của người dùng. Mã hóa mật khẩu bằng MD5, ví dụ vào trang http://www.md5.cz/, nhập mật khẩu để có được chuỗi
mã hóa.
Sử dụng hàm header() để điều hướng trang web, ví dụ:
if (!checkEmpty($_POST['username']) &&
!checkEmpty($_POST['password'])) {
echo '<pre>';
print_r($_POST);
echo '</pre>';
} else {
header('location:index.php');
}
[users.txt]
teo|c4ca4238a0b923820dcc509a6f75849b|Nguyen Van Teo
ti|c81e728d9d4c2f636f067f89cc14862c|Tran Van Ti
Nếu đăng nhập đúng tên người dùng trong tập tin users.txt,
thì xuất ra thông tin của người dùng đó ra màn hình.
[process.php]
<?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
(!checkEmpty($_POST['username']) && !checkEmpty($_POST['password'])) {
$username =
$_POST['username'];
$password =
$_POST['password'];
$data =
file('users.txt');
foreach ($data as
$value) {
$user = explode('|',
$value);
if ($user[0] ==
$username) {
echo
'<pre>';
print_r($user);
echo
'</pre>';
break;
}
}
} else {
header('location:index.php');
}
?>
Cách làm trên không tối ưu về tốc độ xử lý.
Viết lại bằng giải pháp khác.
Đổi tập tin users.txt thành users.ini.
[users.ini]
teo = "teo|c4ca4238a0b923820dcc509a6f75849b|Nguyen Van
Teo"
ti = "ti|c81e728d9d4c2f636f067f89cc14862c|Tran Van Ti"
[process.php]
<?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
(!checkEmpty($_POST['username']) && !checkEmpty($_POST['password'])) {
$username =
$_POST['username'];
$password =
$_POST['password'];
$data =
parse_ini_file('users.ini');
if (array_key_exists($username,
$data)) {
echo $userInfo =
$data[$username];
}
} else {
header('location:index.php');
}
?>
Đây là clip số 103:
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 session 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
session_start();
if
(isset($_SESSION['flagPermission'])) {
if (time() - 20 >
$_SESSION['timeout']) {
session_unset();
header('location:index.php');
} else {
echo '<h3>
Xin chào: ' . $_SESSION['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;
}
session_start();
if
(isset($_SESSION['flagPermission'])) {
if (time() - 20 >
$_SESSION['timeout']) {
session_unset();
header('location:index.php');
} else {
echo '<h3> Xin
chào: ' . $_SESSION['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]) {
$_SESSION['fullname'] = $userInfo[2];
$_SESSION['flagPermission'] = true;
$_SESSION['timeout'] = time();
echo '<h3>
Xin chào: ' . $_SESSION['fullname'] . '</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
session_start();
session_unset();
header('location:index.php');
?>
-----------
Cập nhật [8/1/2018]
-----------
Xem thêm: