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.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
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
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:
- giao_trinh_mo_dun_xay_dung_website_su_dung_framework_php_cod.pdf