Bài viết sử dụng Zend Framework - ApplicationSkeleton để viết tiếp ứng dụng login/logout. (Nếu bạn chưa biết cách cài đặt ZF2 như thế nào thì có thể vào đây để tham khảo cách cài đặt ZF2)
Đầu tiên, chúng ta tạo ra một module mới "User" theo cấu trúc như hình bên. Trong module này, mình sẽ dùng 1 controller duy nhất để tiến hành viết demo cho ứng dụng login/logout cơ bản với session trong ZF2. Ngoài ra, mọi người nên có thêm tầng model dùng để connect DB lúc login, nhưng vì để đơn giản hóa cho bài viết này, nên mình tạm lướt qua phần model tương tác DB.
Trong tập tin Module.php thì mình chỉ đơn giản viết 2 phương thức dùng đó là getConfig và getAutoloaderConfig. Việc này rất đơn giản, và ý nghĩa của nó đó là lấy cấu hình dựa vào trong file module.config.php và thiết lập cơ chế autoload theo chuẩn mặc định (Standard)
Trong file cấu hình module.config.php này, chủ yếu là thiết lập router để chúng ta xử lý demo cho việc login/logout. Sau khi cấu hình xong các bước này, thì chúng ta phải bổ sung thêm 1 module mới vào tập tin application.config.php thì ứng dụng ZF2 mới có thể hiểu và thực thi module mới này.
<form method="post"> <table style="width: 100%"> <tr> <td style="width: 10%"> Username </td> <td> <input type="text" name="username" /> </td> </tr> <tr> <td style="width: 10%"> Password </td> <td> <input type="password" name="password" /> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="login" /> </td> </tr> </table> </form>
Tiếp theo mình xây dựng tầng controller -action xử lý cho việc người dùng login thông qua form đã tạo như sau:
Ở đây chúng ta chú ý các dòng được tô vàng, đó là việc chúng ta khai báo dùng Namespace Zend\Session\Container để lưu trữ session của người dùng, và 2 dòng bên dưới chúng ta lưu giá trị username vào đối tượng Container. Như có nói bên trên, bài viết này mình không đề cập tới việc dùng model để tương tác DB, mọi người tự tay làm ha ^^ (Tham khảo bài viết sau để biết cách tương tác DB trong ZF2)
Như vậy là xong phần login, chúng ta đi tiếp tới phần welcome (lấy giá trị session đã lưu) và phần logout (hủy session) theo như hình bên dưới
Như vậy là chúng ta xây dựng xong 1 ứng dụng nhỏ nhưng luôn luôn có ở hầu hết các website - login/logout. Đây chỉ là một phần ứng dụng rất nhỏ và đơn giản cho việc áp dụng Session trong ZF2. Hy vọng sẽ giúp được mọi người.
Xem thêm các bài viết khác về ZF2 tại blog
hay quá! cảm ơn bạn nhiều nha!!
ReplyDelete_________________
hat dieu vo lua – hat dieu lua
Thanks A Quang.
ReplyDeletevậy làm cách nào để ghi nhớ đăng nhập và cài timeout?
ReplyDeleteĐơn giản nhất bạn có thể dùng cookie, và chỉ cần dùng JS ko cần dùng PHP
Deleteanh ơi ... thế làm sao để mình so sánh cái giá trị nhập vào với giá trị trong csdl để tbao là login thành công đc ạ T.T
ReplyDeleteChào em,
DeleteRất vui vì thấy em để lại lời nhắn trong blog của anh. Để có thể thực hiện tương tác CSDL, em có thể tham khảo bài viết: http://tmquang6805.blogspot.com/2013/03/zend-framework-2-access-db-via-pdo.html
Em cũng có thể tham khảo những bài viết ZF2 tại: http://tmquang6805.blogspot.com/search/label/Zend%20Framework%202
em cảm ơn anh nha! em làm được rồi ạ
Delete! Lang thang trên mạng thì thấy có nhiều site đạo lại bài của anh phết! ví dụ : http://expressmagazine.net/development/2142/zend-framework-2-login-zf2-using-session-basic
Không gì em ơi. Kiến thức cần được chia sẻ và nhân rộng. Anh ban đầu cũng thấy khó chịu và cũng email cho trang web đó, nhưng rồi anh cũng không làm nữa. Anh cũng chỉ chịu trách nhiệm bài viết của anh trên blog anh.
DeleteNếu ai đó để lại comment trên đây, anh sẽ vui vẻ trả lời, còn trên những site khác thì anh không cần biết. Nhiều site copy lắm, nhưng site của anh chủ yếu chia sẻ những kinh nghiệm của anh, chứ không nhằm mục đích kiếm tiền gì nên không vấn đề bản quyền ở đây.
Em thấy blog anh có ý nghĩa với em thì ghé thăm thôi. hihi, cảm ơn em nhiều.
em cảm ơn anh nha ^^ em làm đc rồi ạ! mà anh có tut hướng dẫn đăng nhập với google bằng zend 2 không ạ anh ~~!
ReplyDeleteChúc mừng em. Hiện tại anh khá bận nên không có thời gian viết thêm blog technical. Thời gian tới anh sẽ quay lại. Hy vọng khi đó sẽ giúp được em ^^
DeleteAnh oi... cho en hoi chut la... trong function nao ma muon dung session la lai phai khoi tao lai no hay sao a ~~
ReplyDeleteChào em, vui là em quay lại sau 1 thời gian :)
DeleteĐúng đó em, em khai báo lại object Container đúng với namespace mà cần lấy em ha. Ngấm ngầm bên dưới nó sẽ lấy dữ liệu session cho em.