April 30, 2013

Zend Framework 2: Login ZF2 using session basic

Việc dùng session trong một ứng dụng web là chuyện rất bình thường và gần như là một điều bắt buộc trong việc lập trình ứng dụng web ngày nay. Bài viết không có ý định giải thích session là gì, cách khai báo, cơ chế như thế nào... trong session. Bài viết chỉ đơn giản làm một ví dụ minh họa cách dùng session đơn giản nhất trong Zend Framework 2 (ZF2). Việc ứng dụng hay dùng nhất  và cũng đơn giản nhất đó chính là việc login/logout trong một website, như vậy mình cũng sẽ dựa vào đây để làm ví dụ minh họa cho bài viết này.

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.


Tiếp theo thì xây dựng một tầng view login cho user đơn giản như hình trên. Việc này khá đơn giản, chúng ta chỉ cần xây dựng một tầng view như đoạn HTML bên dưới
<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

12 comments:

  1. hay quá! cảm ơn bạn nhiều nha!!



    _________________
    hat dieu vo lua – hat dieu lua

    ReplyDelete
  2. vậy làm cách nào để ghi nhớ đăng nhập và cài timeout?

    ReplyDelete
    Replies
    1. Đơ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

      Delete
  3. anh ơ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

    ReplyDelete
    Replies
    1. Chào em,

      Rấ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

      Delete
    2. em cảm ơn anh nha! em làm được rồi ạ
      ! 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

      Delete
    3. 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.

      Nế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.

      Delete
  4. 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 ~~!

    ReplyDelete
    Replies
    1. Chú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 ^^

      Delete
  5. Anh oi... cho en hoi chut la... trong function nao ma muon dung session la lai phai khoi tao lai no hay sao a ~~

    ReplyDelete
    Replies
    1. Chào em, vui là em quay lại sau 1 thời gian :)
      Đú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.

      Delete