Zend Framework: Zend_Session_Namespace

  • PHP and Mysql
  • 18 tháng 09 2012
  • bởi Văn Khương
  • 0 Comments

Thông thường việc sử dụng session cũng đơn giản nhưng Zend cũng đã viết cho chúng ta một ứng dụng Zend Session giúp chúng ta khai báo và thao tác với session nhanh gọn hơn, đặc biệt khi thao tác với giỏ hàng hay những ứng dụng sử dụng lượng session lớn, bài viết này sẽ giới thiệu về cách sử dụng lớp Zend_Session_Namespace() để tạo và thao tác với session .

Nếu chúng ta khai báo một đối tượng và tạo ra một thuộc tính như sau:

$defaultNamespace = new Zend_Session_Namespace();
$defaultNamespace>user = "myusername";

Điều này là tương đương theo cách viết thông thường là:

$_SESSION['Default']['user'] = "myusername";

Nếu ta khai báo như sau:

$authNamespace = new Zend_Session_Namespace('Zend_Auth');
$authNamespace->user = "myusername";

Điều này tương đương theo cách viết thông thường là:

$_SESSION['Zend_Auth']['user'] = "myusername";

Ta có thể truy cập session trên như một thuộc tính của đối tượng thông thường:

echo $authNamespace->user;

Hoặc chúng ta có thể sử dụng phương thức getIterator() để truy cập session như dạng mảng:

$zendAuth = $authNamespace->getIterator();
echo $zendAuth['user'];

Để hủy một session nào đó ta sử dụng hàm unset trong PHP thông thường:

unset($authNamespace->user)

Để hủy tất cả các session của một namespace ta sử dụng phương thức unsetAll():

$authNamespace->unsetAll();

Ngoài ra ta có thể khóa một namespace,làm cho namespace đó ở trạng thái chỉ đọc nghĩa là không được phép tạo thêm hoặc thay đổi các giá trị của session như ví dụ sau:

$authNamespace->lock();

Sử dụng phương thức isLocked() để kiểm tra xem namespace có bị khóa hay không, sử dụng phương thức unLock() để mở khóa như ví dụ sau:

if($authNamespace->isLocked()){
$authNamespace->unLock();
}

Mặc đinh khi bạn gọi lớp Zend_Session_Namespace thì Zend_Session::start() đã được thực hiện, để sử dụng session ở một trang khác bạn có thể gọi Zend_Session_Namespace bất cứ khi nào bạn cần, nhưng cách thực hành tốt nhất là ta khai báo Zend_Session::start() ở trong tập tin bootstrap.ini để có sử dụng session cho cả ứng dụng bằng cách gọi session thông thường.

Một điều chú ý là nếu bạn đã sử dụng Zend_Session_Namespace của Zend thì không nên truy cập session trực tiếp với session_start() điều này Zend sẽ báo lỗi.

Tiếp theo ta sẽ đề cập tới chức năng xét thời gian tồn tại cho namespace.  Để làm được điều này Zend đã xây dựng sẵn 2 phương thức trong lớp Zend_Session_Namespace setExpirationHops()setExpirationSeconds()

setExpirationSeconds()

Thời gian tính bằng giây namespace hết hiệu lực, phương thức có 2 tham số, tham số thứ nhất là thời gian, tham số thứ 2 là danh sách các session hay các thuộc tính của namespace được áp dụng, mặc định là tất cả, nếu áp dụng cho một thuộc tính thì tham số thứ 2 để tên của thuộc tính dưới dạng chuỗi, nếu có nhiều thuộc tính thì đưa vào một mảng. Ví dụ:

$authNamespace->(5,'user');

setExpirationHops()

Xác định thời gian tồn tại cho namespace bằng số lần gửi yêu cầu truy cập session liên tiếp. Phương thức có 3 tham số, tham số thứ nhất là số lần gửi yêu cầu, tham số thứ 2 giống như phương thức setExpirationSeconds(), tham số thứ 3 là dạng boolean nếu là true thì chỉ áp dụng setExpirationHops() khi  namespace được sử dụng nghĩa là khi bạn gọi tới lớp Zend_Session_Namespace của namespace bạn muốn sử dụng, ngược lại là false  thì không quan tâm tới namespace có được sử dụng hay không, tham số thứ 3 mặc định được gán giá trị là false. Ví dụ:

$authNamespace->setExpirationHops(4,'user');

Bạn có thể tham khảo thêm về Zend_Session tại framework.zend.com

  • Chia sẻ
comments powered by Disqus