Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 91 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
91
Dung lượng
1,17 MB
Nội dung
ỦY BAN NHÂN DÂN TỈNH LÂM ĐỒNG TRƯỜNG CAO ĐẲNG NGHỀ ĐÀ LẠT GIÁO TRÌNH MƠN HỌC/ MƠ ĐUN: XÂY DỰNG WEBSITE SỬ DỤNG FRAMEWORK (PHP CODEIGNITER FRAMEWORK) NGÀNH/ NGHỀ: THIẾT KẾ TRANG WEB TRÌNH ĐỘ: CAO ĐẲNG Ban hành kèm theo Quyết định số: 1157/QĐ-CĐNĐL ngày 11 tháng 12 năm 2019 Hiệu trưởng Trường Cao đẳng Nghề Đà Lạt (LƯU HÀNH NỘI BỘ) Lâm Đồng, năm 2019 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm Giáo trình lưu hành nội Trường Cao đẳng Nghề Đà Lạt Trang LỜI GIỚI THIỆU Vài nét xuất xứ giáo trình: Giáo trình viết theo Thông tư số 03/2017/TT-BLĐTBXH ngày 01 tháng 03 năm 2017 Bộ Lao động – Thương binh Xã hội việc Quy định quy trình xây dựng, thẩm định ban hành chương trình; tổ chức biên soạn, lựa chọn, thẩm định giáo trình đào tạo trình độ trung cấp, trình độ cao đẳng Quá trình biên soạn: Giáo trình biên soạn có tham gia tích cực giáo viên có kinh nghiệm, với ý kiến đóng góp quý báu chuyên gia lĩnh vực công nghệ thông tin Mối quan hệ tài liệu với chương trình, mơ đun/mơn học: Căn vào chương trình đào tạo nghề Thiết kế trang web, giáo trình giúp cung cấp cho người học kỹ sử dụng tảng CodeIgniter để phát triển ứng dụng web ngôn ngữ PHP Để học mô đun người học cần có kiến thức PHP HTML Cấu trúc chung giáo trình bao gồm bài: CodeIgniter tảng ứng dụng web nguồn mở viết ngôn ngữ PHP Rick Ellis (CEO EllisLab, Inc) Phiên phát hành ngày 28.02.2006, phiên tại: 1.7.2 (phát hành ngày 11.09.2009) Ý tưởng xây dựng CodeIgniter dựa Ruby on Rails, tảng ứng dụng web viết ngôn ngữ Ruby Hiện tại, CodeIgniter phát triển ExpressionEngine Development Team thuộc EllisLab, Inc Lời cảm ơn Giáo trình biên soạn sở văn quy định Nhà nước tham khảo nhiều tài liệu liên quan có giá trị Song hẳn q trình biên soạn khơng tránh khỏi thiếu sót định Ban biên soạn mong muốn thực cảm ơn ý kiến nhận xét, đánh giá chun gia, thầy đóng góp cho việc chỉnh sửa để giáo trình ngày hồn thiện Lâm Đồng, ngày 10 tháng 12 năm 2019 Tham gia biên soạn Phạm Đình Nam Ngơ Thiên Hoàng Nguyễn Quỳnh Nguyên Phan Ngọc Bảo Trang Mục lục Giới thiệu 1.1 Tổng quan 1.2 Những điểm bật 1.4 Những điểm hạn chế Tìm hiểu 2.1 Mơ hình Model-View-Controller 2.2 Cấu trúc CodeIgniter 2.3 Dòng chảy liệu CodeIgniter 10 2.4 CodeIgniter URL 11 2.5 Model 13 2.6 View 14 2.7 Controller 16 2.8 C|c thư viện 18 1.3 2.9 Cài đặt Các helper plugin 21 2.10 Tự động khai báo 23 2.11 Quản lý lỗi 23 2.12 Lưu trữ đệm 24 2.13 Debugging 25 2.14 Bảo mật 26 3.1 Những thư viện 26 Input and Security 26 3.1.1 Cơ chế lọc XSS 27 3.1.2 Các hàm tiện ích 27 3.2 Form Validation 28 Trang 3.2.1 Thiết lập c|c điều kiện kiểm tra 29 3.2.2 Xử lý lỗi 33 3.2.3 Các hàm tiện ích 34 3.3 Database 35 3.3.1 Thiết lập thông tin sở liệu 35 3.3.2 Kết nối đến sở liệu 37 3.3.3 Truy vấn liệu 37 3.3.4 Active Record 42 3.3.5 Truy vấn liệu 43 3.3.6 Thao tác liệu 52 3.3.7 Lưu trữ truy vấn Active Record 56 3.3.8 Giao dịch (transaction) CodeIgniter 57 3.3.9 Một số phương thức trợ giúp 58 3.3.10 3.3.11 3.4 Quản trị sở liệu với Database Forge & Database Utility 62 Bộ đệm sở liệu 68 Email 70 3.4.1 Thiết lập tùy chọn 71 3.4.2 Thực gửi email 73 3.4.3 Wordwrap 73 3.4.4 C|c phương thức 73 3.5 Encryption 76 3.5.1 Thiết lập khóa 77 3.5.2 C|c phương thức 77 3.6 Session 79 3.6.1 Thiết lập tùy chọn 79 3.6.2 Cách thức hoạt động 80 Trang 3.6.3 Flashdata 82 3.6.4 Lưu session v{o sở liệu 82 Những helper hữu ích 83 4.1 Cookie 83 4.2 File 84 Kết luận 86 Danh mục từ viết tắt 86 Tài liệu tham khảo 87 Trang Giới thiệu 1.1 Tổng quan CodeIgniter tảng ứng dụng web nguồn mở viết ngôn ngữ PHP Rick Ellis (CEO EllisLab, Inc) Phiên phát hành ngày 28.02.2006, phiên tại: 1.7.2 (phát hành ngày 11.09.2009) Ý tưởng xây dựng CodeIgniter dựa Ruby on Rails, tảng ứng dụng web viết ngôn ngữ Ruby Hiện tại, CodeIgniter phát triển ExpressionEngine Development Team thuộc EllisLab, Inc 1.2 Những điểm bật Được thiết kế theo mơ hình Model-View-Controller: Mơ hình MVC giúp tách thành phần hiển thị giao diện (presentation) xử lý (business logic) phần mềm thành thành phần độc lập, từ giúp cho việc thiết kế, xử lý bảo trì mã nguồn dễ d{ng, đồng thời tăng khả mở rộng phần mềm CodeIgniter vận dụng mơ hình thiết kế, giúp tách biệt tập tin giao diện với tập tin xử lý liệu, nâng cao khả quản lý dễ bảo trì Nhỏ gọn: Gói c{i đặt 404KB (khơng bao gồm phần User Guide) So với c|c PHP framework kh|c CakePHP (1.3MB), Symfony (5.08MB) hay Zend Framework (5.66MB)…kích thước CodeIgniter giúp giảm thiểu đ|ng kể không gian lưu trữ Tốc độ nhanh: CodeIgniter đ|nh gi| l{ PHP framework có tốc độ nhanh Bằng chế lưu nội dung vào đệm (cache), kiểm tra đệm trước tiến hành thực yêu cầu, CodeIgniter giảm số lần truy cập xử lý liệu, từ tối ưu hóa tốc độ tải trang Miễn phí: CodeIgniter ph|t h{nh giấy phép Apache/BSD mở rộng, cho phép người dùng tự thay đổi, phát triển phân phối mã nguồn Hỗ trợ Search Engine Optimization: Cấu trúc URL CodeIgniter thân thiện với robot tìm kiếm Hệ thống thư viện phong phú: CodeIgniter cung cấp c|c thư viện phục vụ cho tác vụ thường gặp lập trình web, chẳng hạn truy cập sở liệu, gửi email, kiểm tra liệu, quản lý session, xử lý ảnh…đến chức n}ng cao XML-RPC, mã hóa, bảo mật… Bảo mật hệ thống: Cơ chế kiểm tra liệu chặt chẽ, ngăn ngừa XSS SQL Injection CodeIgniter giúp giảm thiểu c|c nguy bảo mật cho hệ thống Trang 1.3 Những điểm hạn chế Chưa hỗ trợ Object-Relational Mapping: Object Relational Mapping (ORM) kỹ thuật lập trình, c|c bảng sở liệu ánh xạ th{nh c|c đối tượng chương trình Kỹ thuật giúp cho việc thực c|c thao t|c sở liệu (Create Read Update Delate – CRUD) dễ dàng, mã nguồn ngắn gọn Hiện tại, CodeIgniter chưa hỗ trợ ORM Chưa hỗ trợ AJAX: AJAX (Asynchronous JavaScript and XML) đ~ trở thành phần thiếu ứng dụng Web 2.0 AJAX giúp n}ng cao tính tương t|c người dùng hệ thống, giúp cho người dùng có cảm gi|c sử dụng ứng dụng desktop c|c thao t|c diễn “tức thời” Hiện tại, CodeIgniter chưa có thư viện dựng sẵn n{o để hỗ trợ xây dựng ứng dụng AJAX Lập trình viên phải sử dụng c|c thư viện bên ngo{i, jQuery, Script.aculo.us, Prototype hay Mootools… Chưa hỗ trợ số module thông dụng: So sánh với framework khác, CodeIgniter khơng có module thực thi số tác vụ thường gặp trình xây dựng ứng dụng web Chứng thực người dùng (User Authorization), Trình phân tích RSS (RSS Parser) hay Trình xử lý PDF… Chưa hỗ trợ Event-Driven Programming: Event-Driven Programming (EDP) ngun lý lập trình, c|c luồng xử lý hệ thống dựa vào kiện, chẳng hạn click chuột, gõ b{n phím…Đ}y khơng phải khuyết điểm to lớn CodeIgniter tại, có số framework hỗ trợ EDP, bao gồm Prado, QPHP Yii 1.4 Cài đặt Yêu cầu hệ thống: CodeIgniter hoạt động nhiều hệ điều hành server, yêu cầu có c{i đặt PHP phiên 4.x cao hơn; hệ quản trị sở liệu: MySQL (4.1+), MySQLi, Mircrosoft SQL Server, Postgres, Oracle, SQLite, ODBC Hướng dẫn c{i đặt: Download nguồn CodeIgniter website http://codeigniter.com/, phiên tại: 1.7.2 Mở tập tin application/config/config.php chương trình soạn thảo, thay đổi giá trị $config['base_url'] Đ}y l{ đường dẫn tuyệt đối đến thư mục CodeIgniter server Nếu ứng dụng có tương t|c với sở liệu, thiết lập giá trị cần thiết tập tin application/config/database.php Trang Upload tất thư mục tập tin CodeIgniter lên server Để nâng cao tính bảo mật hệ thống, người dùng đổi tên thư mục system CodeIgniter Sau đổi tên, người dùng phải thay đổi giá trị biến $system_folder tập tin index.php Tìm hiểu 2.1 Mơ hình Model-View-Controller Model-View-Control (MVC) kiến trúc phần mềm, xem mẫu thiết kế công nghệ phần mềm Mơ hình MVC tách biệt phần xử lý liệu khỏi phần giao diện, cho phép phát triển, kiểm tra bảo trì thành phần c|ch độc lập View Model Controller Hình 1: Minh họa mơ hình MVC Theo đó: - - - Model thể cấu trúc liệu Các lớp thuộc thành phần Model thường thực tác vụ truy vấn, thêm, xóa, cập nhật liệu Khi liệu Model thay đổi, thành phần View cập nhật lại View thành phần thể liệu Model thành giao diện tương t|c với người sử dụng Một Model có nhiều View tùy thuộc vào mục đích kh|c Controller đóng vai trị trung gian Model v{ View Thơng tin người dùng từ View gửi cho Controller xử lý, sau Controller tương t|c với Model để lấy liệu yêu cầu, sau Controller trả liệu cho View Mơ hình MVC thường sử dụng ứng dụng web, thành phần View (mã HTML/XHTML) sinh từ ngôn ngữ lập trình web Thành Trang wrapchars 76 mailtype Text charset utf8 validate priority FALSE \n crlf Số ký tự dòng sử dụng wordwrap text html Định dạng email Bảng m~ sử dụng TRUE/FALSE 1, 2, 3, 4, Có kiểm tra tính hợp lệ địa email không Độ ưu tiên email với cao nhất, bình thường thấp \n, \r \r\n Ký tự xuống dòng (sử dụng \r\n theo RFC 822) newline \n \n, \r \r\n Ký tự xuống dòng (sử dụng \r\n theo RFC 822) bcc_batch_mode FALSE TRUE/FALSE Có sử dụng BCC Batch Mode hay không 200 3.4.2 Thực gửi email bcc_batch_size Số địa email nhóm sử dụng BCC Batch Mode Sau khai báo sử dụng thư viện Email thiết lập tùy chọn cần thiết, ta thực gửi email đoạn mã sau: $this->load->library('email'); $this->email->from('your@example.com', 'Your Name'); $this->email->to('someone@example.com'); $this->email->cc('another@another-example.com'); $this->email->bcc('them@their-example.com'); $this->email->subject('Email Test'); $this->email->message('Testing the email class.'); $this->email->send(); echo $this->email->print_debugger(); Trang 75 3.4.3 Wordwrap Chế độ wordwrap cho phép hiển thị văn “khung” định, giúp cho văn khơng tràn khỏi khung hình thuận tiện cho người đọc Theo RFC 822, chế độ wordwrap nên kích hoạt Thư viện Email cho phép thực wordwrap nội dung email Sau n ký tự (mặc định 76, thiết lập giá trị wrapchars), văn đưa sang hàng Tuy nhiên, liên kết dài, thực wordwrap làm cho chúng bị ngắt quãng, click Để tr|nh điều n{y, thư viện Email sử dụng hai tag {unwrap} {/unwrap} để thơng b|o cho chương trình biết đoạn văn khơng thực wordwrap Ví dụ The text of your email that gets wrapped normally {unwrap}http://example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap} More text that will be wrapped normally 3.4.4 Các phương thức from() Cú pháp $this->email->from(string $email, string $name) Phương thức from() cho phép thiết lập địa email tên người gửi reply_to() Cú pháp $this->email->reply_to(string $email, string $name) Phương thức reply_to() cho phép thiết lập địa email nhận trả lời Nếu phương thức n{y không sử dụng, hệ thống tự nhận địa email phương thức from() l{m địa nhận trả lời to() Cú pháp $this->email->to(string/array $emailAddresses) Phương thức to() cho phép thiết lập địa email gửi C|c địa n{y cách dấu phẩy (,) lưu mảng Ví dụ: Trang 76 $this->email->to('one@example.com, two@example.com, three@example.com'); $list = array('one@example.com', 'two@example.com', 'three@example.com'); $this->email->to($list); cc() Cú pháp $this->email->cc(string/array $emailAddresses) Phương thức cc() cho phép thiết lập địa email nhận gửi email (carbon copy) Người nhận thấy địa thiết lập phương thức cc() Cũng giống phương thức to(), ta truyền v{o danh s|ch c|c địa email mảng bcc() Cú pháp $this->email->bcc(string/array $emailAddresses) Phương thức bcc() cho phép thiết lập địa email nhận gửi email, nhiên người nhận không thấy email thiết lập phương thức to(), cc() bcc() (blind carbon copy) Cũng giống phương thức to(), ta truyền v{o danh s|ch c|c địa email mảng subject() Cú pháp $this->email->subject(string $subject) Phương thức subject() cho phép thiết lập tiêu đề email message() Cú pháp $this->email->message(string $message) Phương thức message() cho phép thiết lập nội dung email set_alt_message() Cú pháp $this->email->set_alt_message(string $message) Trang 77 Phương thức set_alt_message() cho phép thiết lập nội dung thay email Nếu email gửi có dạng HTML người nhận khơng muốn hiển thị HTML lý bảo mật, nội dung thay hiển thị Nếu phương thức n{y không sử dụng, CodeIgniter tự động tách bỏ tag HTML phần nội dung email làm nội dung thay clear() Cú pháp $this->email->clear([boolean $clearAttachment]) Phương thức clear() xóa tất giá trị đ~ thiết lập c|c phương thức from(), reply_to(), to(), cc(), bcc(), subject(), message() Phương thức n{y thường sử dụng bên vòng lặp, giúp khởi động lại giá trị sau lần lặp Ví dụ: foreach ($list as $name => $address) { $this->email->clear(); $this->email->to($address); $this->email->from('your@example.com'); $this->email->subject('Here is your info '.$name); $this->email->message('Hi '.$name.' Here is the info you requested.'); $this->email->send(); } Nếu biến tùy chọn xóa $clearAttachment có giá trị TRUE, tất tập tin đính kèm bị send() Cú pháp $this->email->send() Phương thức send() thực việc gửi email Phương thức trả TRUE gửi email th{nh công, ngược lại trả FALSE attach() Cú pháp $this->email->attach(string $filePath) Phương thức attach() đính kèm tập tin v{o email Phương thức nhận đường dẫn tương đối đến tập tin máy chủ l{m đối số thứ Nếu muốn đính kèm nhiều tập tin, ta gọi phương thức nhiều lần Trang 78 print_debugger() Cú pháp $this->email->print_debugger() Phương thức print_debugger() hiển thị thông tin trả từ phía server, email header nội dung email Thường sử dụng cho việc gỡ lỗi Ví dụ: if ( $this->email->send() == FALSE ) { $this->email->print_debugger(); } 3.5 Encryption Trong ứng dụng web, việc bảo mật thông tin người sử dụng l{ điều bắt buộc Đối với ứ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 số thẻ tín dụng, điện thoại, địa chỉ, email…quyết định sống website Thư viện Encryption CodeIgniter xây dựng nhằm hỗ trợ lập trình viên thực mã hóa/giải mã c|ch đơn giản hiệu Thư viện Encryption sử dụng chế mã hóa đối xứng Thơng điệp cần mã hóa tiền xử lý cách thực phép XOR với đoạn hash ngẫu nhiên Sau đó, kết thu mã hóa lần thư viện Mcrypt Nếu phiên PHP c{i đặt khơng kích hoạt thư viện Mcrypt, kết mã hóa cung cấp mức độ bảo mật chấp nhận cho ứng dụng nhỏ Trong trường hợp sử dụng thư viện Mcrypt, mức độ bảo mật nâng cao nhiều Để sử dụng thư viện Encryption, ta khai b|o phương thức load() sau: $this->load->library('encrypt'); Sau khai báo, ta sử dụng c|c phương thức thư viện Encryption cách gọi: $this->encrypt->some_function(); Lưu ý: Thông điệp sau mã hóa có chiều dài gấp khoảng 2.6 lần chiều dài văn gốc Do đó, cần lưu ý chọn kiểu liệu lưu trữ phù hợp Đối với hệ quản trị sở liệu MySQL, ta dùng kiểu TEXT để lưu trữ thơng điệp đ~ m~ hóa Trang 79 3.5.1 Thiết lập khóa Một khóa đoạn thơng tin sử dụng q trình mã hóa/giải mã Để giải mã thơng điệp, ta phải sử dụng khóa dùng để m~ hóa thơng điệp Do vậy, cần lựa chọn khóa cách thận trọng Nếu thay đổi khóa dẫn đến giải mã thông điệp đ~ tồn Khóa nên có chiều dài 32 ký tự (128 bit), kết hợp ngẫu nhiên số, chữ thường chữ hoa Giá trị khóa thiết lập giá trị $config['encryption_key'] tập tin application/config/config.php, ta đưa khóa v{o 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() m~ hóa thơng điệp truyền vào, sử dụng khóa mặc định thiết lập tập tin application/config/config.php Hoặc ta chọn khóa khác 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() giải m~ thông điệp truyền vào, sử dụng khóa mặc định thiết lập 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ử dụng để mã hóa thơng tin Giá trị mặc định MCRYPT_RIJNDAEL_256 (thuật toán Rijndael 256 bits) Danh Trang 80 sách thuật tốn mã hóa xem http://vn2.php.net/manual/en/mcrypt.ciphers.php set_mode() Cú pháp $this->encrypt->set_mode(string $mode) Phương thức set_mode() cho phép thiết lập chế độ hoạt động thư viện Mcrypt Giá trị mặc định MCRYPT_MODE_ECB Danh sách chế độ hoạt động khác xem trang http://vn2.php.net/manual/en/function.mcrypt-cfb.php 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 tốn SHA1 Kết trả l{ thơng điệp mã hóa 160 bit Cũng giống MD5, SHA1 mã hóa bất đối xứng, thơng điệp mã hóa khơng thể giải m~ 3.6 Session Thư viện Session CodeIgniter giúp quản lý trạng thái người dùng họ truy cập website C|c thơng tin n{y lưu trữ (và mã hóa) tập tin cookie Hoặc ta thiết lập lưu trữ session sở 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 PHP CodeIgniter tạo liệu session riêng nó, nhằm cung cấp cách thức quản lý linh động Để sử dụng thư viện Session, ta khai b|o sau: $this->load->library('session'); Sau khai báo, ta sử dụng c|c phương thức thư viện Session cách gọi: $this->session->some_function(); 3.6.1 Thiết lập tùy chọn thư viện Session lưu tin application/config/config.php, bao gồm giá trị sau: Các tùy Thiết lập chọn Giá trị mặc định Tùy chọn tập Mô tả Trang 81 trang sess_cookie_name sess_expiration sess_encrypt_cookie ci_session Khơng có Tên cookie chứa session 7200 Thời hạn tồn session n{y, tính giây Mặc định Nếu có giá trị 0, session không hết hạn FALSE Cho biết có mã hóa liệu session hay không Sess_use_database FALSE sess_table_name ci_sessions TRUE/FALSE TRUE/FALSE Cho biết có lưu liệu session v{o sở liệu hay không Tên bảng lưu session sess_time_to_update sess_match_ip sess_match_useragent Thời gian (tính giây) session tái tạo 300 FALSE FALSE 3.6.2 Cách thức hoạt động TRUE/FALSE TRUE/FALSE Cho biết có so s|nh địa IP đọc liệu session hay không Đối với IP động, nên cho tùy chọn FALSE Cho biết có so sánh thơng tin trình duyệt đọc liệu session hay không Khi trang tải về, CodeIgniter kiểm tra có liệu session hợp lệ cookie người dùng hay không Nếu session không tồn đ~ hết hạn, session tạo v{ lưu v{o cookie người dùng Nếu session tồn tại, thông tin bên session cập nhật session_id tạo Thông tin session mảng chứa giá trị sau: • Một Session ID hash với độ tinh khiết cao, mã hóa thuật tốn MD5 m{ cập nhật sau phút Ta thay đổi session_id: Trang 82 thời nhật cách thiết lập giá $config['time_to_update'] tập tin system/config/config.php • • • gian cập trị biến ip_address: Địa IP người dùng user_agent: User Agent: 50 ký tự thơng tin trình duyệt người dùng last_activity: Timestamp chứa hoạt động cuối người dùng Các thông tin 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() sau: $this->session->userdata(string $item); Với $item khóa mảng chứa thông tin session Chẳng hạn, để lấy địa IP 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ả FALSE Thêm thông tin vào session Để thêm thông tin vào session tại, ta sử dụng phương thức set_userdata() sau: $this->session->set_userdata(array $data); Trong mảng $data có khóa tên thông tin giá trị tương ứng 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 thêm thơng tin theo cách sau: $this->session->set_userdata(string $item, string $value); Trang 83 Xóa thơng tin session Để xóa thơng tin session, ta sử dụng phương thức unset_userdata() 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 sau: $array_items = array('username' => '', 'email' => ''); $this->session->unset_userdata($array_items); Xóa tất session Để xóa tất session, ta sử dụng phương thức sess_destroy() sau: $this->session->sess_destroy(); 3.6.3 Flashdata CodeIgniter hỗ trợ “flashdata”, l{ session sử dụng lần xóa tự động Flashdata phân biệt với liệu thường tiền tố flash_ Để thêm flashdata, ta sử dụng phương thức set_flashdata() sau: $this->session->set_flashdata(string $item, string $value); Hoặc ta truyền vào mảng phương thức set_userdata() Để lấy thông tin flashdata, ta sử dụng phương thức flashdata() sau: $this->session->flashdata('item'); Để giữ lại flashdata, ta dùng phương thức keep_flashdata() $this->session->keep_flashdata('item'); 3.6.4 Lưu session vào sở liệu Session lưu cookie người dùng chứa Session ID Ta khơng có cách tính xác thực Session ID Bằng c|ch lưu session v{o sở liệu, CodeIgniter phát có thơng tin session cookie người dùng, truy vấn thực Nếu Session ID người dùng v{ sở liệu khơng trùng khớp, session bị hủy Khi Session ID khơng cập nhật, tạo có session Trang 84 Để kích hoạt chức lưu session v{o sở liệu, ta thiết lập biến có giá trị TRUE biến $config['sess_table_name'] tập tin application/config/config.php Thông tin session lưu bảng có cấu trúc sau: $config['sess_use_database'] 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 NOT NULL, user_data text NOT NULL, PRIMARY KEY (session_id) ); Những helper hữu ích 4.1 Cookie Cookie helper giúp ta thao tác với liệu cookie m|y người dùng, bao gồm hàm sau: set_cookie() Cú pháp set_cookie(array $data) Cho phép thiết lập liệu cookie m|y người dùng Mảng liệu truyền vào có dạng sau: $cookie = array( 'name' 'value' 'expire' 'domain' 'path' 'prefix' => => => => => => 'The Cookie Name', 'The Value', '86500', '.some-domain.com', '/', 'myprefix_', ); set_cookie($cookie); Trong đó: • name: • • value: • • domain: • tên cookie giá trị cookie expire: thời gian tồn cookie tính từ thời điểm Nếu thời gian 0, cookie xóa domain cookie path: đường dẫn cookie, thường khơng cần thiết h{m đ~ thiết lập đường dẫn gốc prefix: tiền tố, nhằm phân biệt với cookie trùng tên khác Hoặc ta thiết lập cookie theo cú pháp sau: Trang 85 set_cookie($name, $value, $expire, $domain, $path, $prefix); get_cooki e() Cú pháp get_cookie(string $cookieName[, boolean $xssFilter]) Lấy liệu cookie từ m|y người dùng Hàm nhận tên cookie (bao gồm phần tiền tố) l{m đối số Nếu đối số thứ hai có giá trị TRUE, hàm thực loại bỏ XSS giá trị đọc Hàm trả FALSE cookie không tồn delete_cooki e() Cú pháp delete_cookie(string $cookieName) Hàm delete_cookie() giúp xóa cookie m|y người dùng H{m n{y tương đương với hàm set_cookie() với expiration Ta truyền gọi hàm theo cú pháp: delete_cookie($name, $domain, $path, $prefix) 4.2 File File helper giúp ta thao tác với tập tin, bao gồm 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ứ Đường dẫn l{ đường dẫn tương đối tuyệt đối Hàm trả FALSE trường hợp thất bại write_fil e() Cú pháp write_file(string $path, string $data[, string $writeMode]) Trang 86 Hàm write_file() giúp ghi liệu xuống tập tin Nếu tập tin không tồn tại, CodeIgniter tự động tạo tập tin Ta chọn chế độ ghi tập tin cách truyền v{o đối số thứ ba Thông tin chế độ ghi tập tin xem trang http://vn2.php.net/manual/en/function.fopen.php Chế độ ghi mặc định wb Để hàm hoạt động, yêu cầu tập tin phải phép ghi (CHMOD 666, 777…) v{ thư mục chứa tập tin phải phép ghi delete_files() Cú pháp delete_files(string $path[, boolean $deleteDir]) Hàm delete_files() giúp xóa tất tập tin thư mục truyền vào Nếu đối số thứ hai có giá trị TRUE, tất thư mục bên đường dẫn truyền v{o bị xóa get_filename s() Cú pháp get_filenames(string $path[, boolean $includePath]) Hàm get_filenames() trả mảng chứa tên tất tập tin thư mục truyền vào Nếu đối số thứ hai có giá trị TRUE, đường dẫn $path 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 truyền v{o, sau trả mảng chứa tên tập tin, kích thước tập tin, ng{y thay đổi phân quyền Thông tin c|c thư mụ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 truyền vào trả 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 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 87 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 tập tin) Nếu tập tin không tìm thấy, hàm trả 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, 777…kết trả từ hàm fileperms()) hiển thị 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ự hiển thị dạng số Ví dụ: echo octal_permissions(fileperms('./index php')); // 644 Kết luận Qua tìm hiểu trên, ta thấy CodeIgniter tảng mạnh, cung cấp đầy đủ thư viện chức cần thiết để xây dựng ứng dụng web với tốc độ nhanh mà đảm bảo hiệu hệ thống So với tảng khác, CodeIgniter không cồng kềnh, không làm lập trình viên giảm hứng thú sử dụng Ngồi ra, cộng đồng người sử dụng CodeIgniter lớn, không ngừng đưa plugin, helper hỗ trợ việc lập trình Dù cho CodeIgniter cịn số điểm hạn chế, bản, nói CodeIgniter ng{y c{ng nhận ủng hộ từ phía lập trình viên PHP Phiên 2.0 CodeIgniter giai đoạn phát triển beta, hứa hẹn đem đến chức hữu ích thú vị Trang 88 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 Tài liệu tham khảo - CodeIgniter User Guide http://codeigniter.com/user_guide/ - Wikipedia – The Free Encyclopedia http://en.wikipedia.org/wiki/Model–view–controller http://en.wikipedia.org/wiki/Object-relational_mapping http://en.wikipedia.org/wiki/Event-driven_programming http://en.wikipedia.org/wiki/Active_record_pattern Trang 89 ... Quy định quy trình xây dựng, thẩm định ban hành chương trình; tổ chức biên soạn, lựa chọn, thẩm định giáo trình đào tạo trình độ trung cấp, trình độ cao đẳng Quá trình biên soạn: Giáo trình biên... trang web, giáo trình giúp cung cấp cho người học kỹ sử dụng tảng CodeIgniter để phát triển ứng dụng web ngôn ngữ PHP Để học mô đun người học cần có kiến thức PHP HTML Cấu trúc chung giáo trình bao... thư viện dựng sẵn n{o để hỗ trợ xây dựng ứng dụng AJAX Lập trình viên phải sử dụng c|c thư viện bên ngo{i, jQuery, Script.aculo.us, Prototype hay Mootools… Chưa hỗ trợ số module thông dụng: So