You are on page 1of 77

Trường Đại Học Tôn Đức Thắng

Khoa Công Nghệ Thông Tin

LẬP TRÌNH WEB VÀ ỨNG


DỤNG
• Bộ môn: Công nghệ phần mềm
• Mã môn học: 503073
• Thời lượng: 3(2, 1)
• Giảng viên: Vũ Đình Hồng
10/19/2022 503015 - PHP nâng cao 1
PHP nâng cao

• Ngày giờ (Date/time)


• Xử lý form
• Xử lý tập tin
• Cookies, sessions
• Authentication
• Xử lý lỗi

9/17/2012 503024 - PHP nâng cao 2


Nhãn thời gian Unix (Unix
timestamp)

• Một phương thức biểu diễn thời gian bằng


cách đếm số giây bắt đầu từ thời điểm
Unix Epoch (1970-01-01 00:00:00)
• Được sử dụng rộng rãi các hệ điều hành
tương tự Unix và nhiều hệ điều hành khác
• Chuyện gì sẽ xảy ra vào ngày 19-01-
2038?

9/17/2012 503024 - PHP nâng cao 3


Ngày giờ

• Các hàm ngày/giờ cho phép trích và định


dạng ngày và giờ trên server
• Hàm date() định dạng một nhãn thời gian
(timestamp) thành ngày và tháng dễ hiểu
hơn
date(format, [timestamp])
• Ví dụ:
– date("Y-m-d", time())
– date("Y")
9/17/2012 503024 - PHP nâng cao 4
Định dạng ngày

Ký tự định dạng Mô tả Ví dụ các giá trị trả về

d Ngày trong tháng, 2 chữ số 01 tới 31

D Ngày trong tuần, 3 ký tự Mon tới Sun

j Ngày trong tháng (không bắt đầu với 0) 1 tới 31

l Tên đầy đủ của ngày trong tuần Sunday tới Saturday


Số thứ tự các ngày trong tuần (ISO-8601) 1 (cho Monday) tới 7 (cho
N
(được thêm trong PHP 5.1.0) Sunday)
Hậu tố thứ tự trong tiếng Anh cho các ngày st, nd, rd hoặc th (nên dùng
S
trong tháng (2 ký tự) với j)
0 (cho Sunday) tới 6 (cho
w Biểu diễn số của các ngày trong tuần
Saturday)
z Ngày trong năm(bắt đầu từ 0) 0 tới365

9/17/2012 503024 - PHP nâng cao 5


Định dạng tuần

Ký tự định dạng Mô tả Các giá trị trả về

Số thứ tự của tuần trong năm (tuần bắt


Ví dụ: 42 (tuần thứ 42
W đầu từ ngày thứ Hai - ISO-8601 ) (được
trong năm)
thêm trong PHP 4.1.0)

9/17/2012 503024 - PHP nâng cao 6


Định dạng tháng

Ký tự định dạng Mô tả Ví dụ các giá trị trả về

Tên đầy đủ của một tháng, như


F January tới December
January hoặc March
Biểu diễn số của một tháng, gồm 2 ký
m 01 tới 12
tự (với 0 ở đầu)
Tên rút gọn của một tháng, gồm 3 ký
M Jan tới Dec
tự
Biểu diễn số của một tháng (không
n 1 tới 12
bắt đầu với 0)
t Số ngày trong một tháng đã cho 28 tới 31

9/17/2012 503024 - PHP nâng cao 7


Định dạng năm

Ký tự định dạng Mô tả Ví dụ các giá trị trả về

Xác định một năm có phải là năm nhuận 1 nếu là năm nhuận,
L
hay không 0 nếu ngược lại
Ví dụ: 1999 hoặc
o Năm theo chuẩn ISO-8601, 4 chữ số
2003
Biểu diễn số đầy đủ của một năm, 4 chữ Ví dụ: 1999 hoặc
Y
số 2003
Biểu diễn số rút gọn của một năm, 2 chữ
y Ví dụ: 99 hoặc 03
số

9/17/2012 503024 - PHP nâng cao 8


Định dạng thời gian

Ký tự định dạng Mô tả Các giá trị trả về

Định dạng chữ thường của ký tự chỉ buổi sáng và


a am hoặc pm
buổi chiều
Định dạng chữ hoa của ký tự chỉ buối sáng và
A AM hoặc PM
buổi chiều
Thời gian thập phân (1 ngày được chia thành
B 000 tới 999
1000 nhịp-beat, 1 beat ~ 1phút 26,4 giây)
g Định dạng 12-giờ (không bắt đầu với 0) 1 tới12
G Định dạng 24-giờ (không bắt đầu với 0) 0 tới 23
h Định dạng 12-giờ của một giờ, 2 chữ số 01 tới12
H Định dạng 24-giờ của một giờ, 2 chữ số 00 tới 23
i Phút với hai chữ số 00 tới 59
s Giây với hai chữ số 00 tới 59
u Micro giây (được thêm trong PHP 5.2.2) Ví dụ: 654321
9/17/2012 503024 - PHP nâng cao 9
Định dạng múi giờ (timezone)

Ký tự định dạng Mô tả Ví dụ các giá trị trả về

Ví dụ: UTC, GMT,


e Tên múi giờ(thêm trong PHP 5.1.0)
Atlantic/Azores
Xác định một ngày có nằm trong giờ 1 nếu là trong giờ mùa hè,
I
mùa hè hay không 0 cho ngược lại
Sự khác biệt với giờ chuẩn (GMT) tính
O Ví dụ: +0200
theo giờ
Sự khác biệt với giờ chuẩn với dấu :
P Ví dụ: +02:00
giữa giờ và phút (PHP 5.1.3)
T Viết tắt của múi giờ Ví dụ: EST, MDT ...
Offset của các múi giờ theo giây. Offset
Z cho các múi giờ phía tây của UTC luôn -43200 tới 50400
âm, còn phía đông thì luôn âm

9/17/2012 503024 - PHP nâng cao 10


Định dạng ngày tháng đầy đủ

Ký tự định dạng Mô tả Ví dụ các giá trị trả về

2004-02-
c Ngày theo chuẩn ISO 8601(PHP 5)
12T15:19:21+00:00
Ví dụ: Thu, 21 Dec 2000
r Định dạng ngày theo RFC 2822
16:01:07 +0200
Số giây kể từ thời điểm Unix Epoch
U Dùng time()
(January 1 1970 00:00:00 GMT)

9/17/2012 503024 - PHP nâng cao 11


Các hàm ngày giờ thường dùng

• mktime(h, m, s, m, d, y) – trả về Unix


timestamp
• time() - trả về Unix timestamp hiện tại
• date(string) - định dạng ngày/tháng
• microtime() – trả về Unix timestamp hiện
tại với micro giây
• date_default_timezone_set(string) – thiết
lập múi giờ mặc định
9/17/2012 503024 - PHP nâng cao 12
PHP nâng cao

• Ngày giờ (Date/time)


• Xử lý form
• Xử lý tập tin
• Cookies, sessions
• Authentication
• Xử lý lỗi

9/17/2012 503024 - PHP nâng cao 13


Phương thức GET

• Các đối số của Form được ghi chèn vào


đường dẫn URL của thuộc tính action
trong tag <Form>

• Khối lượng dữ liệu đối số được truyền đi


của Form bị giới hạn bởi chiều dài tối đa
của một URL (2048 bytes)

9/17/2012 503024 - PHP nâng cao 14


Phương thức POST

• Các đối số của Form được truyền “ngầm”


bên dưới

• Khối lượng dữ liệu đối số được truyền đi


của Form không phụ thuộc vào URL 
Không bị giới hạn

9/17/2012 503024 - PHP nâng cao 15


9/17/2012 503024 - PHP nâng cao 16
9/17/2012 503024 - PHP nâng cao 17
Truyền nhận dữ liêu với Form

• Cơ chế Truyền và Nhận dữ liệu giữa


các trang web
• Truyền/Nhận qua Phương thức GET
• Truyền/Nhận qua Phương thức POST
• Một số ví dụ

9/17/2012 503024 - PHP nâng cao 18


Cơ chế truyền nhận dữ liệu

www.example.com
Webserver

2
Internet
or Intranet
Yêu cầu trang b.php 7

9/17/2012 503024 - PHP nâng cao 19


Cơ chế truyền nhận dữ liệu

9/17/2012 503024 - PHP nâng cao 20


Cơ chế truyền nhận dữ liệu

www.example.com
Textbox : txtDangnhap
Webserver
Password Box: txtMatkhau
2
txtDangnhap = admin Internet
or Intranet
txtMatkhau = phpAdmin
7
Yêu cầu trang xlDangnhap.php

9/17/2012 503024 - PHP nâng cao 21


Cơ chế truyền nhận dữ liệu

• Trang web nhập dữ liệu


– Sử dụng đối tượng <form>
– Nhập liệu thông qua các formfield
– Thực hiện việc truyền dữ liệu thông qua Submit

<FORM ACTION=“URL” METHOD=“GET/POST”>



<input type=“submit” value=“Xử lý”>
</FORM>

9/17/2012 503024 - PHP nâng cao 22


Cơ chế truyền nhận dữ liệu

• Trang web nhận dữ liệu (URL): Sử dụng


các biến toàn cục của PHP
– $_POST[“FieldName”]
– $_GET[“FieldName”]
– $_REQUEST[“FieldName”]

9/17/2012 503024 - PHP nâng cao 23


Trang web nhập liệu

timSach.php
<html>
<body>
<h1>Tìm sách</h1>
<form action="xlTimSach.php" Method="GET" >
Từ khóa : <input type="text" name="txtTukhoa"/>
<input type="submit" value="Tìm"/>
</form>
</body>
</html>

9/17/2012 503024 - PHP nâng cao 24


Trang web nhập liệu

xltimSach.php
<html>
<body>
<?php
$sTukhoa = $_REQUEST["txtTukhoa"];
?>
<h1>Tìm sách</h1>
Từ khóa tìm sách là : <?php echo $sTukhoa; ?>
<br />
Kết quả tìm là :
</body>
</html>

9/17/2012 503024 - PHP nâng cao 25


Trang web nhập liệu

xuly.php
<html>
<body>
<form action="xuly.php" Method="GET" >
Từ khóa : <input type="text" name="txtTukhoa"/>
<input type="submit" value="Tìm"/>
</form>
<?php
$sTukhoa = $_REQUEST["txtTukhoa"];
if (isset($sTukhoa)) {
print "Từ khóa tìm sách là : $sTukhoa";
echo "<br>Kết quả tìm là : ";
}
?>
</body>
</html>
9/17/2012 503024 - PHP nâng cao 26
Truyền nhận dữ liêu với Form

• Truyền nhận dữ liệu giữa các trang web


• Truyền/nhận qua phương thức GET
• Truyền/nhận qua phương thức POST
• Một số ví dụ

9/17/2012 503024 - PHP nâng cao 27


Truyền/nhận qua phương thức GET

• Tham số truyền đi qua địa chỉ URL


– http://domain/pathfile?
fieldname1=value1&fieldname2=value2
– http://localhost/xuly.php?txtTukhoa=PHPHost
• Nhận dữ liệu thông qua biến toàn cục của
PHP
– $_GET[“FieldName”]
– $_REQUEST[“FieldName”]

9/17/2012 503024 - PHP nâng cao 28


Truyền/nhận qua phương thức GET

• Khuyết điểm
– Không thích hợp để truyền dữ liệu có tính bảo
mật (password)
– Dung lượng dữ liệu truyền đi có giới hạn
– URL submit bằng phương thức GET được lưu
lại trên server
• Ưu điểm
– Người dùng có thể bookmark địa chỉ URL
– Có thể Giả lập phương thức GET để truyền
9/17/2012
dữ liệu mà không cần thông qua FORM
503024 - PHP nâng cao 29
Truyền/nhận qua phương thức GET

File: GET.HTML
<HTML>
<HEAD>
<TITLE>Input data</TITLE>
</HEAD>

<BODY>
<IMG SRC=“images/N72.jpg”><br>
<A HREF=‘chitiet.php?Ma=N72’>Xem chi tiết</A>
</BODY>
</HTML>

9/17/2012 503024 - PHP nâng cao 30


Truyền/nhận qua phương thức GET
File: CHITIET.PHP
<HTML>
<HEAD>
<TITLE>Input data</TITLE>
</HEAD>
<BODY>
<?php
echo "Ma dien thoai la " . $_GET["Ma"];
?>
</BODY>
</HTML>

9/17/2012 503024 - PHP nâng cao 31


Truyền nhận dữ liêu với Form

• Cơ chế Truyền và Nhận dữ liệu giữa


các trang web
• Truyền/nhận qua phương thức GET
• Truyền/nhận qua phương thức POST
• Một số ví dụ

9/17/2012 503024 - PHP nâng cao 32


Truyền/nhận qua phương thức POST

• Tham số truyền đi được ẩn bên trong


FORM
• Nhận dữ liệu thông qua biến toàn cục
của PHP
– $_POST[“FieldName”]
– $_REQUEST[“FieldName”]

9/17/2012 503024 - PHP nâng cao 33


Truyền/nhận qua phương thức POST

• Ưu điểm
– Bảo mật hơn phương thức GET
– Không giới hạn dung lượng dữ liệu truyền đi
• Khuyết điểm
– Kết quả trang web trả về không thể bookmark
– Có thể gây ra lỗi nếu người dùng muốn quay lại trang
kết quả (nhấn nút Back hoặc Refresh) do bị expired
– Dữ liệu có thể không truyền đi được do vấn đề về
security

9/17/2012 503024 - PHP nâng cao 34


Truyền nhận dữ liêu với Form

• Cơ chế Truyền và Nhận dữ liệu giữa


các trang web
• Truyền/Nhận qua Phương thức GET
• Truyền/Nhận qua Phương thức POST
• Một số ví dụ

9/17/2012 503024 - PHP nâng cao 35


Truyền/nhận dữ liệu từ Checkbox
File: Checkbox.php
`

9/17/2012 503024 - PHP nâng cao 36


Truyền/nhận dữ liệu từ Radio
Button
File: RADIO.PHP
<html><body>
<form action=“radio.php" method="GET">
<input type=RADIO” NAME=“radGT" value='Nam'>Nam<br>
<input type=RADIO” NAME="radGT“ VALUE=“Nu”>Nữ<br>
<input type=“SUBMIT” VALUE="Submit">
</form>

<?php
if (isset($_GET[‘radGT'])){
echo “Gioi tinh : " . $_GET[‘radGT'];
}
?>
</body></html>
9/17/2012 503024 - PHP nâng cao 37
Truyền/nhận dữ liệu từ ComboBox

File: INDEX.PHP
<html>
<body>
<form method="POST" action="index.php">
<select name="car">
<option value="bmw">BMW</option>
<option value="ferrari">Ferrari</option>
<option>Toyota</option>
</select>
<input type="submit" name="submit" value="Chọn"/>
</form>
Loại xe được chọn :<br/>
<?php
if (isset($_POST['car']))
{
echo "Bạn đã chọn xe ". $_POST['car'] . "<br/>";
}
?>
</body>
</html>
9/17/2012 503024 - PHP nâng cao 38
Truyền/Nhận dữ liệu từ Listbox
File: INDEX.PHP
<html><body>
<form method="POST" action="index.php">
<select name="cars[]" multiple="multiple">
<option value="bmw">BMW</option>
<option value="ferrari">Ferrari</option>
<option>Toyota</option>
</select>
<input type="submit" name="submit"
value="Chọn"/>
</form>
Loại xe được chọn :<br/>
<?php
foreach ($_POST['cars'] as $choice) {
echo "Bạn đã chọn xe ". $choice . "<br/>";
}
?>
</body></html>
9/17/2012 503024 - PHP nâng cao 39
PHP nâng cao

• Ngày giờ (Date/time)


• Xử lý form
• Xử lý tập tin
• Cookies, sessions
• Authentication
• Xử lý lỗi

9/17/2012 503024 - PHP nâng cao 40


Xử lý tập tin trong PHP

• Mở tập tin
– $file=fopen($filename, $open_mode);
– Chế độ mở (open modes): r, r+, w, w+,
a, a+
• Đóng tập tin đã mở
– fclose($file);

9/17/2012 503024 - PHP nâng cao 41


Các chế độ mở file

‘r’ Mở để chỉ đọc, con trỏ file ở vị trí bắt đầu file
‘r+’ Mở để đọc và ghi, con trỏ file ở vị trí bắt đầu file
‘w’ Mở chỉ để ghi, xóa tất cả các nội dung trước,
nếu file không tồn tại thì tạo mới
‘w+’ Mở để ghi và đọc, xóa tất cả các nội dung trước,
nếu file không tồn tại thì tạo mới
‘a’ Mở để ghi, con trỏ file ở vị trí cuối của nội dung
hiện tại
‘a+’ Mở để ghi và đọc, bắt đầu từ vị trí cuối và tạo
mới nếu chưa tồn tại

9/17/2012 503024 - PHP nâng cao 42


Đọc tập tin

 fgetc($file)
– Đọc 1ký tự từ con trỏ file
• fgets($ file,[$length])
– Đọc một dòng từ con trỏ file, dừng lại khi gặp
ký tự xuống hàng hoặc ký tự kết thúc file (EOF)
• fread($ file,$length)
– Đọc các ký tự từ con trỏ file, tới khi đủ chiều
dài length hoặc gặp ký tự kết thúc file

9/17/2012 503024 - PHP nâng cao 43


Mở file “tắt”

• 2 hàm ‘tắt’ không yêu cầu phải mở file


– $lines = file($filename)
Đọc toàn bộ file vào trong một mảng với mỗi
dòng là một phần tử của mảng
– $str = file_get_contents($filename)
Đọc toàn bộ file vào một chuỗi đơn

9/17/2012 503024 - PHP nâng cao 44


Xử lý tập tin trong PHP

$file = fopen("welcome.txt", "r") or exit("Unable to open


file!");
//Output a line of the file until the end is reached
while(!feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);

9/17/2012 503024 - PHP nâng cao 45


Ghi dữ liệu

• Sử dụng hàm fwrite($file,$data) để ghi


dữ liệu xuống file

$file= fopen('people.txt', 'a');


fwrite($file, “\nFred:Male”);

fclose($file);

9/17/2012 503024 - PHP nâng cao 46


Các thao tác trên file khác

• Xóa file
– unlink('filename');
• Sửa tên (file hoặc thư mục)
– rename('old name', 'new name');
• Copy file
– copy('source', 'destination');
• Và nhiều hàm hơn nữa:
– www.php.net/manual/en/ref.filesystem.php

9/17/2012 503024 - PHP nâng cao 47


Xử lý với thư mục

• Mở thư mục
– $handle = opendir(‘tenthumuc');
• Đọc nội dung của thư mục:
– readdir($handle)
• Trả lại tên của file tiếp theo trong thư mục
• Các file được sắp xếp như trên hệ thống file
(filesystem)
• Đóng thư mục
– closedir($handle)

9/17/2012 503024 - PHP nâng cao 48


Xử lý với thư mục

$results = array();
$handler = opendir($directory);
while ($file = readdir($handler)) {
if ($file != "." && $file != "..") {
$results[] = $file;
}
}
closedir($handler);

9/17/2012 503024 - PHP nâng cao 49


Các thao tác trên thư mục khác

• Lấy thư mục hiện tại


– getcwd()
• Thay đổi thư mục
– chdir('dirname');
• Tạo thư mục
– mkdir('dirname');
• Xóa thư mục (thư mục PHẢI TRỐNG)
– rmdir('dirname');
• Và nhiều hơn nữa:
– www.php.net/manual/en/ref.dir.php

9/17/2012 503024 - PHP nâng cao 50


Upload file

• Cơ chế Upload File


• Thiết kế Form để Upload File
• Thiết kế trang xử lý File được upload trên
server
• Kiểm tra lỗi, định dạng, kích thước File
upload
• Vấn đề quyền truy cập file

9/17/2012 503024 - PHP nâng cao 51


Cơ chế Upload File
Yêu cầu trang upload.php
Webserver

Internet
file or Intranet

Disk
driver

Upload.php
• $_FILES["file"]["name"]
• $_FILES["file"]["type"]
• $_FILES["file"]["size"]
• $_FILES["file"]["tmp_name"]
• $_FILES["file"]["error“]

9/17/2012 503024 - PHP nâng cao 52


Thiết kế Form để Upload File

• Thiết lập thuộc tính Form


– Method = POST
– Enctype = multipart/form-data

--- UploadForm.html ---

<form method="POST" action=“upload.php”


enctype=“multipart/form-data”>
<input type=“FILE” name =“ProductImg”><br>
<input type=“submit” value=“Submit">
</form>
9/17/2012 503024 - PHP nâng cao 53
Thiết kế trang xử lý File được
upload trên server

move_uploaded_file(tmp_name, saved_name)

--- Upload.php ---


<?php
move_uploaded_file($_FILES["ProductImg"]["tmp_name"],
"upload/" . $_FILES["ProductImg"]["name"]);

echo "Upload: " . $_FILES["ProductImg"]["name"] . “<br>”;


echo "Type: " . $_FILES["ProductImg"]["type"] . “<br>”;
echo "Size: " . ($_FILES["ProductImg"]["size“]/1024) . “Kb<br>”;
echo “Temp. Stored in: " . $_FILES["ProductImg"]["tmp_name"];
?>

9/17/2012 503024 - PHP nâng cao 54


Kiểm tra lỗi, định dạng, kích
thước File upload

• Lưu ý
– $_FILES[“…”][“type”]
• “image/gif”
• “image/jpeg” Firefox nhận đây là file jpeg
• “image/pjpeg” IE nhận đây là file jpeg
– $_FILES[“…”][“size”] : Kích thước file tính theo
byte
– $_FILES[“…”][“error”] : Mã lỗi khi upload File
• = 0 : Không có lỗi
• > 0 : Có lỗi
9/17/2012 503024 - PHP nâng cao 55
Một số lỗi khi upload file

Mã lỗi Hằng số Ý nghĩa


0 UPLOAD_ERR_OK Không có lỗi
1 UPLOAD_ERR_INI_SIZE Kích thước file vượt quá
upload_max_filesize trong php.ini

2 UPLOAD_ERR_FORM_SIZE Kích thước file vượt quá


MAX_FILE_SIZE được khai báo
trong HTML form

3 UPLOAD_ERR_PARTIAL File chỉ được upload một phần


4 UPLOAD_ERR_NO_FILE Không có file nào được upload
6 UPLOAD_ERR_NO_TMP_DIR Không tồn tại thư mục tạm
7 UPLOAD_ERR_CANT_WRITE Lỗi khi ghi file xuống đĩa

9/17/2012 503024 - PHP nâng cao 56


Vấn đề giới hạn kích thước file
upload

• Thay đổi các tham số trong tập tin


php.ini
– upload_max_filesize (mặc định là 2M)
– post_max_size (mặc định là 8M)
• Giới hạn bằng form
– Thêm tham số MAX_FILE_SIZE trước file
field control

9/17/2012 503024 - PHP nâng cao 57


Vấn đề về quyền truy cập File
Cấp quyền cho thư mục /upload
PHP Warning:
move_uploaded_file(upload/14.jpg)
[function.move-uploaded-file]: failed to
open stream: Permission denied in.

Account
IUSR_XXX

Lưu ý :
• Chỉ cấp quyền ghi cho thư mục cần thiết
• Không cấp quyền ghi cho thư mục WebRoot

9/17/2012 503024 - PHP nâng cao 58


PHP nâng cao

• Ngày giờ (Date/time)


• Xử lý form
• Xử lý tập tin
• Cookies, sessions
• Authentication
• Xử lý lỗi

9/17/2012 503024 - PHP nâng cao 59


Bài tập

• Tạo trang php cho phép người dùng


upload file hình (png, gif, jpg) hoặc tài liệu
(doc, docx, xls, xlsx).
• Dùng hàm strrchr(str,char) để tìm ký tự “.”
ở cuối chuỗi:  trả về chuỗi từ vị trí tìm
được đến cuối.
• Dùng hàm substr(str,start,length) để lấy
chuỗi con.

10/19/2022 503015 - PHP cơ bản 60


Cookie – Giới thiệu

cookie

$_COOKIE

setcookie
Client Webserver

 Là 1 tập tin được server lưu xuống máy của client


 Mỗi lần client gửi request 1 trang web, đồng thời sẽ gửi kèm file cookie đã
lưu lần trước lên server
 Các điều khiển xử lý thông tin (lưu, lấy) do server thực hiện
 Thường được sử dụng để lưu thông tin cá nhân của client

9/17/2012 503024 - PHP nâng cao 61


Cookie – Cú pháp sử dụng

• Lệnh ghi cookie


setcookie (name, value, expire, path, domain);
setrawcookie (name, value, expire, path, domain);
• name: tên cookie
• value: giá trị cookie
• expire: ngày/khoảng thời gian hết hạn hết hạn của cookie.
• path : đường dẫn trên server mà cookie sẽ có giá trị
• domain : tên miền mà cookie có giá trị
• secure: 0 hoặc 1
• Lấy giá trị cookie
$_COOKIE["cookieName"]
• Xóa cookie:
setcookie("cookieName", "", time() -3600)

9/17/2012 503024 - PHP nâng cao 62


Cookie – Cú pháp sử dụng

• path: quy định phạm vi chấp nhận cookies


của website.
/ : cookie sẽ được chấp nhận tại tất cả các trang
của website
/dir_1/dir_2/…/dir_n/ : cookie sẽ được chấp
nhận tại các trang trong thư mục dir_n và trong
các thư mục con của nó.
Mặc định path = thư mục của tập tin có lệnh gán
giá trị cookies.

9/17/2012 503024 - PHP nâng cao 63


Cookie – Cú pháp sử dụng

• Gán một mảng trong cookie:


<?php
// Gán giá trị cookie
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");

// Đọc giá trị trong cookie


if (isset($_COOKIE['cookie'])) {
    foreach ($_COOKIE['cookie'] as $name => $value) {
        echo "$name : $value <br />\n";
    }
}
?>
9/17/2012 503024 - PHP nâng cao 64
Cookie – Ví dụ

$_COOKIE[fieldName]

cookie
Lưu username & password

setcookie
Client

Webserver

9/17/2012 503024 - PHP nâng cao 65


Cookie – Ứng dụng

• Tự động nhớ password


• Tự động đăng nhập
• Lưu trạng thái của người dùng (giỏ
hàng, …)

9/17/2012 503024 - PHP nâng cao 66


Session
$_SESSION[sessionVar]
Cookie: PHPSESSID

session_start
Client Webserver

 Là thông tin về client được server lưu trên máy của server
 Sử dụng session lưu định danh duy nhất cho từng client
 Mục đích lưu biến dữ liệu dùng chung cho nhiều trang trong 1
phiên làm việc của client

9/17/2012 503024 - PHP nâng cao 67


Session – Cú pháp sử dụng

• Khởi động Session


session_start(); //phải xuất hiện trước thẻ <html>
• Ghi & Đọc giá trị Session
$_SESSION["sessionVar"] = value
$_SESSION["sessionVar"][ ] = array(…)
if (isset($_SESSION["sessionVar"])
echo $_SESSION["sessionVar"];

• Hủy Biến trong Session


unset($_SESSION["sessionVar"]);

• Hủy cả Session
session_destroy();
9/17/2012 503024 - PHP nâng cao 68
Session – Cấu hình

• Cấu hình trong php.ini


ini_set('parameterName', 'value');
• Gọi trước hàm session_start();
parameterName Default
session.auto_start 0 Không tự động
session.cookie_lifetime 0 Thời gian tồn tại cho cookie
(mặc định là đến khi đóng
browser)
session.name PHPSESSID Tên session (mà sẽ được
dùng đặt tên cho cookie)

9/17/2012 503024 - PHP nâng cao 69


Parameter Name Default Ghi chú
defines the argument which is passed to the save handler. If you choose the default files handler, this is
session.save_path "" the path where the files are created. Defaults to /tmp.
specifies the name of the session which is used as cookie name. It should only contain alphanumeric
session.name "PHPSESSID" characters. Defaults to PHPSESSID.
defines the name of the handler which is used for storing and retrieving data associated with a session.
session.save_handler "files" Defaults to files.
specifies whether the session module starts a session automatically on request startup. Defaults to 0
session.auto_start "0" (disabled).
in conjunction with session.gc_divisor is used to manage probability that the gc (garbage collection)
session.gc_probability "1" routine is started. Defaults to 1
coupled with session.gc_probability defines the probability that the gc (garbage collection) process is
started on every session initialization. The probability is calculated by using gc_probability/gc_divisor, e.g.
session.gc_divisor "100" 1/100 means there is a 1% chance that the GC process starts on each request. session.gc_divisor defaults
to 100.
specifies the number of seconds after which data will be seen as 'garbage' and cleaned up. Garbage
session.gc_maxlifetime "1440" collection occurs during session start.
session.serialize_handler "php"
specifies the lifetime of the cookie in seconds which is sent to the browser. The value 0 means "until the
browser is closed." Defaults to 0. See also session_get_cookie_params() and session_set_cookie_params
session.cookie_lifetime "0" (). Since the cookie is returned by the browser, it is not prolonged to suffice the lifetime. It must be sent
manually by setcookie().
specifies path to set in session_cookie. Defaults to /. See also session_get_cookie_params() and
session.cookie_path "/" session_set_cookie_params().
specifies the domain to set in session_cookie. Default is none at all meaning the host name of the server
session.cookie_domain "" which generated the cookie according to cookies specification. See also session_get_cookie_params() and
session_set_cookie_params().
specifies whether cookies should only be sent over secure connections. Defaults to off. This setting was
session.cookie_secure "" added in PHP 4.0.4. See also session_get_cookie_params() and session_set_cookie_params().
Marks the cookie as accessible only through the HTTP protocol. This means that the cookie won't be
session.cookie_httponly "" accessible by scripting languages, such as JavaScript. This setting can effectly help to reduce identity theft
through XSS attacks (although it is not supported by all browsers).

9/17/2012 503024 - PHP nâng cao 70


Parameter Name Default Ghi chú
specifies whether the module will use cookies to store the session id on the client side. Defaults
session.use_cookies "1" to 1 (enabled).
specifies whether the module will only use cookies to store the session id on the client side.
session.use_only_cookies "1" Enabling this setting prevents attacks involved passing session ids in URLs. This setting was
added in PHP 4.3.0.
contains the substring you want to check each HTTP Referer for. If the Referer was sent by the
session.referer_check "" client and the substring was not found, the embedded session id will be marked as invalid.
Defaults to the empty string.
gives a path to an external resource (file) which will be used as an additional entropy source in
session.entropy_file "" the session id creation process. Examples are /dev/random or /dev/urandom which are available
on many Unix systems.
specifies the number of bytes which will be read from the file specified above. Defaults to 0
session.entropy_length "0" (disabled).
specifies cache control method to use for session pages
session.cache_limiter "nocache" (none/nocache/private/private_no_expire/public). Defaults to nocache. See also
session_cache_limiter().
specifies time-to-live for cached session pages in minutes, this has no effect for nocache limiter.
session.cache_expire "180" Defaults to 180. See also session_cache_expire().
session.use_trans_sid "0" whether transparent sid support is enabled or not. Defaults to 0 (disabled).
PHP versions 4.2.3 and lower have an undocumented feature/bug that allows you to initialize a
session variable in the global scope, albeit register_globals is disabled. PHP 4.3.0 and later will
session.bug_compat_42 "1" warn you, if this feature is used, and if session.bug_compat_warn is also enabled. This
feature/bug can be disabled by disabling this directive.
PHP versions 4.2.3 and lower have an undocumented feature/bug that allows you to initialize a
session variable in the global scope, albeit register_globals is disabled. PHP 4.3.0 and later will
session.bug_compat_warn "1" warn you, if this feature is used by enabling both session.bug_compat_42 and
session.bug_compat_warn.
session.hash_function allows you to specify the hash algorithm used to generate the session IDs.
session.hash_function "0" '0' means MD5 (128 bits) and '1' means SHA-1 (160 bits).
allows you to define how many bits are stored in each character when converting the binary
session.hash_bits_per_character "4" hash data to something readable. The possible values are '4' (0-9, a-f), '5' (0-9, a-v), and '6' (0-9,
a-z, A-Z, "-", ",").
specifies which HTML tags are rewritten to include session id if transparent sid support is
url_rewriter.tags enabled. Defaults to a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=

9/17/2012 503024 - PHP nâng cao 71


Session

<?php
session_start( );
if (isset($_SESSION["count"]))
$_SESSION["count"] = $_SESSION["count"] + 1;
else
$_SESSION["count"] = 1;

print "You've looked at this page " . $_SESSION['count']


. "times.";
?>

9/17/2012 503024 - PHP nâng cao 72


Session - Ứng dụng cho Login

• Làm thế nào để ngăn không cho người


dùng truy cập vào các trang web nếu
chưa đăng nhập?
• Ý tưởng
– Dùng các biến Session để lưu trạng thái đăng nhập của người
dùng:
$_SESSION["IsLogin"] = true/false : Lưu trạng thái
đăng nhập
$_SESSION["Username"]: Lưu tên đăng nhập
$_SESSION["Authentication"]: Lưu loại quyền đăng nhập

9/17/2012 503024 - PHP nâng cao 73


Session - Ứng dụng cho Login

1. Tạo trang login.htm yêu cầu người dùng đăng nhập.


2. Tạo trang validateuser.php xử lí thông tin đăng nhập từ trang
login.htm
– Kết nối với CSDL, kiểm tra thông tin đăng nhập có hợp lệ hay
không ?
• Nếu không hợp lệ thì cho redirect về trang login.htm.
• Nếu hợp lệ thì dùng một biến trong Session để lưu trạng thái
login thành công
– Ví dụ: $_SESSION["IsLogin"] = true.
– Lưu ý: Phải đặt giá trị mặc định cho biến Session này là false khi
khởi tạo một Session (xem ví dụ ở slide sau).
3. Tạo trang logout.php là trang xử lý khi người dùng logout
 Reset trạng thái login là chưa đăng nhập
($_SESSION["IsLogin"] = false).

9/17/2012 503024 - PHP nâng cao 74


Session - Ứng dụng cho Login

4. Trong tất cả các trang muốn bảo mật, thêm đoạn mã sau để
kiểm tra người dùng đã đăng nhập hay chưa, nếu chưa thì
redirect lại trang login.html.

<?php
session_start();

if ($_SESSION["IsLogin"] == false)
header("Location: login.html");
?>

9/17/2012 503024 - PHP nâng cao 75


Session – Cookie – Database
Cookie1

Session 1

Cookie2
Client 1 Web Server

Session 2 Session 3
Internet
or Intranet
Client 2 Database Server

Cookie3

Client 3

Thông tin chia sẻ Vị trí Thời gian Số client Số trang web


lưu trữ tồn tại sử dụng
Database/File Server Dài Nhiều Nhiều
Session Server Ngắn 1 Nhiều
Cookies Client Dài 1 Nhiều
9/17/2012 503024 - PHP nâng cao 76
CẢM ƠN

10/19/2022 503015 - PHP cơ bản 77

You might also like