Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web

1. Tập tin index.php đóng vai trò l{m controller đầu vào, thiết lập các tài

nguyên cần thiết cho hệ thống.

2. Routing: Qu| trình điều hướng giúp x|c định các yêu cầu v{ hướng xử lý

đối với chúng.

3. Caching: Nếu dữ liệu được yêu cầu đ~ được lưu trong bộ đệm,

CodeIgniter sẽ trả dữ liệu trong bộ đệm về phía client. Quá trình xử lý kết thúc.

4. Security: Dữ liệu trước khi được chuyển đến các Controller sẽ được lọc để

phòng chống XXS hoặc SQL Injection.

5. Application Controller: Controller xử lý dữ liệu nhận được bằng cách gọi

đến c|c Models, Libraries, Helpers, Plugins có liên quan.

6. View: Dữ liệu được chuyển qua View để hiển thị cho người dùng. Nếu

chức năng caching được bật, dữ liệu sẽ được lưu trong cache cho những lần yêu

cầu tiếp theo.

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 1

Trang 1

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 2

Trang 2

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 3

Trang 3

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 4

Trang 4

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 5

Trang 5

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 6

Trang 6

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 7

Trang 7

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 8

Trang 8

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 9

Trang 9

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 91 trang duykhanh 7960
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web

Giáo trình Mô đun Xây dựng Website sử dụng Framework (PHP Codeigniter Framework) - Thiết kế trang Web
Trong một ứng dụng web, việc bảo mật thông tin của người sử dụng l{ điều 
bắt buộc. Đối với các ứng dụng thương mại điện tử, việc mã hóa thông tin khách 
hàng, chẳng hạn như số thẻ tín dụng, điện thoại, địa chỉ, emailquyết định sự 
sống còn của website. 
Thư viện Encryption của CodeIgniter được xây dựng nhằm hỗ trợ lập trình 
viên thực hiện mã hóa/giải mã một c|ch đơn giản và hiệu quả. 
Thư viện Encryption sử dụng cơ chế mã hóa đối xứng. Thông điệp cần mã 
hóa sẽ được tiền xử lý bằng cách thực hiện phép XOR với một đoạn hash ngẫu 
nhiên. Sau đó, kết quả thu được sẽ được mã hóa một lần nữa bởi thư viện Mcrypt. 
Nếu phiên bản PHP được c{i đặt không kích hoạt thư viện Mcrypt, kết quả mã hóa 
vẫn cung cấp một mức độ bảo mật chấp nhận được cho các ứng dụng nhỏ. Trong 
trường hợp sử dụng thư viện Mcrypt, mức độ bảo mật được nâng cao rất nhiều. 
Để sử dụng thư viện Encryption, ta khai b|o phương thức load() như sau: 
$this->load->library('encrypt'); 
Sau khi khai báo, ta có thể sử dụng c|c phương thức của thư viện Encryption 
bằng cách gọi: 
$this->encrypt->some_function(); 
Lưu ý: Thông điệp sau khi mã hóa sẽ có chiều dài gấp khoảng 2.6 lần chiều 
dài của văn bản gốc. Do đó, cần lưu ý chọn kiểu dữ liệu lưu trữ phù hợp. Đối với 
hệ quản trị cơ sở dữ liệu MySQL, ta có thể dùng kiểu TEXT để lưu trữ thông điệp 
đ~ m~ hóa. 
 Trang 80 
3.5.1. Thiết lập khóa 
Một khóa là một đoạn thông tin được sử dụng trong quá trình mã hóa/giải 
mã. Để giải mã một thông điệp, ta phải sử dụng khóa được dùng để m~ hóa thông 
điệp đó. Do vậy, cần lựa chọn khóa một cách thận trọng. Nếu thay đổi khóa sẽ dẫn 
đến không thể giải mã những thông điệp đ~ tồn tại. Khóa nên có chiều dài 32 ký 
tự (128 bit), kết hợp ngẫu nhiên giữa số, chữ thường và chữ hoa. 
Giá trị của khóa được thiết lập giá trị $config['encryption_key'] trong tập 
tin application/config/config.php, hoặc ta cũng có thể đưa khóa v{o khi gọi hàm 
mã hóa. 
3.5.2. Các phương thức 
encode() 
Cú pháp 
$this->encrypt->encode(string $message[, string $key]) 
Phương thức encode() sẽ m~ hóa thông điệp truyền vào, sử dụng khóa mặc 
định được thiết lập trong tập tin application/config/config.php. Hoặc ta cũng có thể 
chọn một khóa khác và truyền v{o l{m đối số thứ hai. Ví dụ: 
$msg = 'My secret message'; 
$key = 'super-secret-key'; 
$encrypted_string = $this->encrypt->encode($msg, $key); 
decode() 
Cú pháp 
$this->encrypt->decode(string $message) 
Phương thức encode() sẽ giải m~ thông điệp truyền vào, sử dụng khóa mặc 
định được thiết lập trong tập tin application/config/config.php. 
set_cipher() 
Cú pháp 
$this->encrypt->set_cipher(string $cipher) 
Phương thức set_cipher() cho phép ta chọn thuật toán sẽ được sử dụng để 
mã hóa thông tin. Giá trị mặc định là MCRYPT_RIJNDAEL_256 (thuật toán Rijndael 256 
bits). Danh 
 Trang 81 
sách các thuật toán mã hóa có 
set_mode() Cú 
pháp 
thể xem ở trang 
$this->encrypt->set_mode(string $mode) 
Phương thức set_mode() cho phép thiết lập chế độ hoạt động của thư viện 
Mcrypt. Giá trị mặc định là MCRYPT_MODE_ECB. Danh sách các chế độ hoạt động khác có 
thể xem ở trang  
sha1() 
Cú pháp 
$this->encrypt->sha1(string $msg) 
Phương thức sha1() cho phép m~ hóa thông điệp theo thuật toán SHA1. Kết 
quả trả về l{ thông điệp mã hóa 160 bit. Cũng giống như MD5, SHA1 là mã hóa bất đối 
xứng, thông điệp mã hóa không thể giải m~ được. 
3.6. Session 
Thư viện Session của CodeIgniter giúp quản lý trạng thái của người dùng khi 
họ truy cập website. C|c thông tin n{y được lưu trữ (và mã hóa) trong một tập tin 
cookie. Hoặc ta cũng có thể thiết lập lưu trữ session trong cơ sở dữ liệu để nâng 
cao tính bảo mật. Lưu ý, kh|i niệm session ở đ}y không liên quan đến session của 
PHP. CodeIgniter tạo ra dữ liệu session của riêng nó, nhằm cung cấp một cách 
thức quản lý linh động hơn. 
Để sử dụng thư viện Session, ta khai b|o như sau: 
$this->load->library('session'); 
Sau khi khai báo, ta có thể sử dụng c|c phương thức của thư viện Session 
bằng cách gọi: 
$this->session->some_function(); 
3.6.1. Thiết lập các tùy chọn 
Các tùy chọn của thư viện Session được lưu trong tập 
 tin application/config/config.php, bao gồm các giá trị sau: 
Thiết lập Giá trị mặc định Tùy chọn Mô tả 
 Trang 82 
sess_cookie_name ci_session Không có 
Tên của cookie sẽ chứa 
session 
sess_expiration 7200 
Thời hạn tồn tại của 
session n{y, được tính bằng 
giây. Mặc định là 2 giờ. Nếu 
có giá trị 0, session sẽ 
không bao giờ hết hạn. 
sess_encrypt_cookie FALSE TRUE/FALSE 
Cho biết có mã hóa dữ liệu 
trong session hay không 
Sess_use_database FALSE TRUE/FALSE 
Cho biết có lưu dữ liệu 
session v{o cơ sở dữ liệu 
hay không 
sess_table_name ci_sessions Tên của bảng sẽ được lưu 
 session 
sess_time_to_update 300 
Thời gian (tính bằng giây) 
session sẽ được tái tạo 
sess_match_ip FALSE TRUE/FALSE 
Cho biết có so s|nh địa chỉ IP 
khi đọc dữ liệu session hay 
không. Đối với IP động, nên 
cho tùy chọn này là FALSE. 
sess_match_useragent FALSE TRUE/FALSE 
Cho biết có so sánh thông 
tin trình duyệt khi đọc dữ 
liệu session hay không. 
3.6.2. Cách thức hoạt động 
Khi một trang được tải về, CodeIgniter sẽ kiểm tra có dữ liệu session hợp lệ 
trong cookie của người dùng hay không. Nếu session không tồn tại hoặc đ~ hết 
hạn, một session mới sẽ được tạo ra v{ lưu v{o cookie của người dùng. Nếu 
session tồn tại, thông tin bên trong session sẽ được cập nhật và một session_id sẽ 
được tạo ra. 
Thông tin session là một mảng chứa các giá trị sau: 
• session_id: Một Session ID là một hash với độ tinh khiết cao, được mã hóa 
bằng thuật toán MD5 m{ được cập nhật sau mỗi 5 phút. Ta có thể thay đổi 
 Trang 83 
thời gian cập nhật này bằng cách thiết lập giá trị biến 
$config['time_to_update'] trong tập tin system/config/config.php. 
• ip_address: Địa chỉ IP của người dùng 
• user_agent: User Agent: 50 ký tự đầu tiên về thông tin trình duyệt của người 
dùng 
• last_activity: Timestamp chứa hoạt động cuối của người dùng 
Các thông tin này sẽ được mã hóa nhằm nâng cao tính bảo mật, giúp ngăn 
chặn người kh|c thay đổi hay đọc session. 
Lấy thông tin từ session 
Để lấy thông tin từ session, ta sử dụng phương thức userdata() như sau: 
$this->session->userdata(string $item); 
Với $item là khóa của mảng chứa thông tin session. Chẳng hạn, để lấy địa chỉ 
IP của người dùng, ta sử dụng: 
$this->session->userdata('ip_address'); 
Nếu khóa không tồn tại, phương thức trả về FALSE. 
Thêm thông tin vào session 
Để thêm một thông tin vào session hiện tại, ta sử dụng phương thức 
set_userdata() như sau: 
$this->session->set_userdata(array $data); 
Trong đó mảng $data có khóa là tên của thông tin và giá trị tương ứng của thông 
tin đó. Ví dụ: 
$newdata = array( 
 'username' => 'johndoe', 
 'email' => 'johndoe@some-site.com', 
 'logged_in' => TRUE 
 ); 
$this->session->set_userdata($newdata); 
Hoặc ta cũng có thể thêm thông tin theo cách sau: 
$this->session->set_userdata(string $item, string $value); 
 Trang 84 
Xóa thông tin trong session 
Để xóa thông tin trong session, ta sử dụng phương thức unset_userdata() như sau: 
$this->session->unset_userdata(string $item); 
Hoặc 
$this->session->unset_userdata(array $items); 
Trong trường hợp sử dụng mảng, ta khai báo mảng như sau: 
$array_items = array('username' => '', 'email' => ''); 
$this->session->unset_userdata($array_items); 
Xóa tất cả session 
Để xóa tất cả session, ta sử dụng phương thức sess_destroy() như sau: 
$this->session->sess_destroy(); 
3.6.3. Flashdata 
CodeIgniter hỗ trợ “flashdata”, l{ những session chỉ được sử dụng một lần và 
sẽ được xóa tự động. Flashdata được phân biệt với dữ liệu thường bởi tiền tố 
flash_. Để thêm một flashdata, ta sử dụng phương thức set_flashdata() như sau: 
$this->session->set_flashdata(string $item, string $value); 
Hoặc ta cũng có thể truyền vào một mảng như đối với phương thức 
set_userdata(). 
Để lấy thông tin flashdata, ta sử dụng phương thức flashdata() như sau: 
$this->session->flashdata('item'); 
Để giữ lại một flashdata, ta dùng phương thức keep_flashdata() 
$this->session->keep_flashdata('item'); 
3.6.4. Lưu session vào cơ sở dữ liệu 
Session được lưu trong cookie của người dùng chứa một Session ID. Ta 
không có cách nào tính xác thực của Session ID này. Bằng c|ch lưu session v{o cơ 
sở dữ liệu, mỗi khi CodeIgniter phát hiện có thông tin về session trong cookie của 
người dùng, một truy vấn sẽ được thực hiện. Nếu Session ID của người dùng v{ 
trong cơ sở dữ liệu không trùng khớp, session sẽ bị hủy. Khi đó Session ID sẽ 
không được cập nhật, nó chỉ được tạo ra khi có session mới. 
 Trang 85 
Để kích hoạt chức năng lưu session v{o cơ sở dữ liệu, ta thiết lập biến 
$config['sess_use_database'] có giá trị TRUE và biến 
$config['sess_table_name'] trong tập tin application/config/config.php. Thông tin 
session được lưu trong một bảng có cấu trúc như sau: 
CREATE TABLE IF NOT EXISTS `ci_sessions` ( 
session_id varchar(40) DEFAULT '0' NOT NULL, 
ip_address varchar(16) DEFAULT '0' NOT NULL, 
user_agent varchar(50) NOT NULL, 
 last_activity int(10) unsigned DEFAULT 0 NOT 
NULL, user_data text NOT NULL, PRIMARY 
KEY (session_id) 
); 
4. Những helper hữu ích 
4.1. Cookie 
Cookie helper giúp ta thao tác với dữ liệu cookie trên m|y người dùng, bao 
gồm các hàm sau: set_cookie() Cú pháp 
set_cookie(array $data) 
Cho phép thiết lập dữ liệu cookie trên m|y người dùng. Mảng dữ liệu truyền vào 
có dạng như sau: 
$cookie = array( 
 'name' => 'The Cookie Name', 
 'value' => 'The Value', 
 'expire' => '86500', 
 'domain' => '.some-domain.com', 
 'path' => '/', 
 'prefix' => 'myprefix_', 
 ); 
 set_cookie($cookie); 
Trong đó: 
• name: tên của cookie 
• value: giá trị của cookie này 
• expire: thời gian tồn tại của cookie tính từ thời điểm hiện tại. Nếu thời gian 
này bằng 0, cookie sẽ được xóa. 
• domain: domain của cookie 
• path: đường dẫn của cookie, thường không cần thiết vì h{m đ~ thiết lập 
đường dẫn gốc. 
• prefix: tiền tố, nhằm phân biệt với các cookie trùng tên khác. 
 Hoặc ta cũng có thể thiết lập cookie theo cú pháp sau: 
 Trang 86 
set_cookie($name, $value, $expire, $domain, $path, $prefix); 
get_cooki
e() Cú 
pháp 
get_cookie(string $cookieName[, boolean $xssFilter]) 
Lấy dữ liệu cookie từ m|y người dùng. Hàm nhận tên cookie (bao gồm cả 
phần tiền tố) l{m đối số đầu tiên. Nếu đối số thứ hai có giá trị TRUE, hàm sẽ thực 
hiện loại bỏ XSS giá trị đọc được. Hàm trả về FALSE nếu cookie không tồn tại. 
delete_cooki
e() Cú pháp 
delete_cookie(string $cookieName) 
Hàm delete_cookie() giúp xóa cookie trong m|y người dùng. H{m n{y tương 
đương với hàm set_cookie() với expiration bằng 0. Ta cũng có thể truyền gọi hàm 
này theo cú pháp: 
delete_cookie($name, $domain, $path, $prefix) 
4.2. File 
File helper giúp ta thao tác với các tập tin, bao gồm các hàm sau: 
read_fil
e() Cú 
pháp 
read_file(string $path) 
Hàm nhận đường dẫn đến tập tin l{m đối số thứ nhất. Đường dẫn này có thể l{ 
đường dẫn tương đối hoặc tuyệt đối. Hàm trả về FALSE trong trường hợp thất bại. 
write_fil
e() Cú 
pháp 
write_file(string $path, string $data[, string $writeMode]) 
 Trang 87 
Hàm write_file() giúp ghi dữ liệu xuống tập tin. Nếu tập tin không tồn tại, 
CodeIgniter sẽ tự động tạo tập tin mới. Ta cũng có thể chọn chế độ ghi tập tin 
bằng cách truyền v{o đối số thứ ba. Thông tin về các chế độ ghi tập tin có thể xem 
ở trang  Chế độ ghi mặc định 
là wb. Để hàm có thể hoạt động, yêu cầu tập tin phải được phép ghi (CHMOD 666, 
777) v{ thư mục chứa tập tin cũng phải được phép ghi. 
delete_files() 
Cú pháp 
delete_files(string $path[, boolean $deleteDir]) 
Hàm delete_files() giúp xóa tất cả tập tin trong thư mục được truyền vào. Nếu đối 
số thứ hai có giá trị TRUE, tất cả thư mục bên trong đường dẫn được truyền v{o 
cũng sẽ bị xóa. 
get_filename
s() Cú pháp 
get_filenames(string $path[, boolean $includePath]) 
Hàm get_filenames() trả về một mảng chứa tên của tất cả các tập tin trong thư 
mục được truyền vào. Nếu đối số thứ hai có giá trị TRUE, đường dẫn $path sẽ được 
thêm vào tên tập tin. get_dir_file_info() Cú pháp 
get_dir_file_info(string $path) 
Hàm get_dir_file_info() đọc thông tin thư mục được truyền v{o, sau đó trả về 
mảng chứa tên tập tin, kích thước tập tin, ng{y thay đổi và phân quyền. Thông tin 
về c|c thư mục con cũng được đọc. 
get 
_file_info() 
Cú pháp 
get_file_info(string $path[, string $fileInformation]) 
Hàm get_file_info() đọc thông tin từ tập tin được truyền vào và trả về tên 
tập tin, kích thước, đường dẫn, ng{y thay đổi. Đối số thứ hai cho phép lựa chọn 
thông tin nào sẽ được trả về, bao gồm: name (tên tập tin), server_path (đường 
dẫn đến tập tin), size (kích thước tập tin), date (ng{y thay đổi), readable (tập tin 
 Trang 88 
có quyền đọc hay không), writable (tập tin có quyền ghi hay không), executable 
(tập tin có quyền thực thi hay không), fileperms (phân quyền của tập tin). Nếu 
tập tin không tìm thấy, hàm trả về FALSE. 
symbolic_permission
s() Cú pháp 
symbolic_permissions(string $perms) 
Hàm symbolic_permissions() nhận phân quyền kiểu số (644, 777kết quả trả 
về từ hàm fileperms()) và hiển thị dưới dạng ký tự. 
Ví dụ: 
echo symbolic_permissions(fileperms('./index.php')); 
// -rw-r--r-- 
octal_permission
s() Cú pháp 
octal_permissions(string $perms) 
Hàm octal_permissions() nhận phân quyền kiểu kí tự và hiển thị dưới dạng số. 
Ví dụ: 
echo 
octal_permissions(fileperms('./index.
php')); 
 // 644 
5. Kết luận 
Qua những tìm hiểu trên, ta thấy CodeIgniter là một nền tảng mạnh, cung 
cấp đầy đủ những thư viện và chức năng cần thiết để xây dựng một ứng dụng 
web với tốc độ nhanh mà vẫn đảm bảo hiệu năng hệ thống. So với các nền tảng 
khác, CodeIgniter không quá cồng kềnh, không làm lập trình viên giảm đi hứng 
thú khi sử dụng. Ngoài ra, cộng đồng người sử dụng CodeIgniter rất lớn, không 
ngừng đưa ra những plugin, helper hỗ trợ việc lập trình. 
Dù cho CodeIgniter vẫn còn một số điểm hạn chế, nhưng về cơ bản, có thể 
nói CodeIgniter đang ng{y c{ng nhận được sự ủng hộ từ phía các lập trình viên 
PHP. Phiên bản 2.0 của CodeIgniter đang trong giai đoạn phát triển beta, hứa hẹn 
sẽ đem đến những chức năng mới hữu ích và thú vị. 
 Trang 89 
6. Danh mục từ viết tắt 
• CRUD: Create Read Update Delete 
• CSV: Comma Separated Values 
• CRLF: Carriage Return [and] Line Feed 
• EDP: Event-Driven Programming 
• MVC: Model-View-Controller 
• ORM: Object-Relational Mapping 
• URI: Uniform Resource Identifier 
• URL: Uniform Resource Location 
• XML: Extensible Markup Language 
• XSS: Cross Site Scripting 
7. Tài liệu tham khảo 
- CodeIgniter User Guide  
- Wikipedia – The Free Encyclopedia 
–view–controller 

File đính kèm:

  • pdfgiao_trinh_mo_dun_xay_dung_website_su_dung_framework_php_cod.pdf