2013-03-04 22 views
17

Gần đây tôi đã bắt đầu xây dựng một ứng dụng bằng Zendframework 2, tôi có kinh nghiệm tốt trong ZF1, vấn đề lớn mà tôi đang gặp phải ở đây với ZF2 là với các phiên.Làm thế nào để xóa một thùng chứa phiên trong Zend framework2

Đây là cách tôi tạo vùng chứa phiên.

use Zend\Session\Container; 

// tạo chứa Session: (trước đây chúng tôi đã gọi nó như là không gian tên)

$session_user = new Container('user'); 
$session_user_errors = new Container('usererrors'); 
$session_user_shares = new Container('usershares'); 

Bây giờ Giống như này, tôi có một vài container,

tôi có thể xóa một chìa khóa của một container đặc biệt như thế này

// Lấy giá trị từ phiên theo khóa: (lấy giá trị từ không gian tên)

$email = $session_user->offsetGet('email'); 

// giá trị Setting trong phiên: (set giá trị từ namespace)

$session_user->offsetSet('username', 'abcd'); 

Bây giờ vấn đề của tôi là để xóa toàn bộ một container được đặt trong nhiều tầng lớp ứng dụng của tôi.

Nếu tôi thử mã dưới đây Thanh toán bù trừ tất cả các vùng chứa phiên của tôi.

$session_user = new Container('user'); 
$session_user->getManager()->getStorage()->clear(); 

Tôi muốn chỉ xóa vùng chứa có tên 'người dùng' có nhiều khóa (Tôi không biết tất cả sẽ có gì ở cuối). Có cách nào để đạt được điều này

Tôi biết tôi có thể thực hiện bù đắp trên mỗi khóa nhưng đó không phải là giải pháp tối ưu mà tôi cảm thấy.

Vui lòng đề xuất nếu có cách nào khác để xóa vùng chứa phiên cụ thể.

LƯU Ý: - Tôi không sử dụng bất kỳ các module bên thứ ba như phiên ZfcUser và Akrabat

Cảm ơn trước để ứng phó với thông báo này.

Trả lời

40

Bạn gần như đã có nó, bạn chỉ cần phải vượt qua không gian tên cho phương thức rõ ràng

$session_user->getManager()->getStorage()->clear('user'); 

Bạn vẫn có thể đối xử với $ _SESSION như một mảng, quá, vì vậy sau đây cũng làm việc

unset($_SESSION['user']); 
+0

Wow đây là cái mà tôi đã không thử, có vẻ đúng sẽ cố gắng lấy lại, nhưng một số làm thế nào, không có ý nghĩa gì trong cách khung công việc, $ session_user đã là một đối tượng của container được gọi là người dùng một lần nữa nói trong phương pháp rõ ràng để xóa vùng chứa người dùng. Tôi đã thử như thế này trước $ session_user-> getManager() -> getStorage() -> user-> clear(); và có lỗi để tôi kiểm tra và lấy lại cho bạn –

+1

Giải pháp hoàn hảo, cảm ơn phản hồi, Nó hoạt động như nét duyên dáng –

1

Giải pháp được đăng bởi @Crisp hoạt động như một sự quyến rũ Nhưng đây là cách thay thế mà tôi tìm thấy sau khi nghiên cứu để giải quyết vấn đề này

use Zend\Session\SessionManager; 

$sessionManager = new SessionManager(); 

//get array of sessions from storage 
$array_of_sessions = $sessionManager->getStorage(); 

//Unset which ever container you want by passing its name (ZF1 its called namespace) 
unset($array_of_sessions['user']); 
unset($array_of_sessions['usershares']); 
unset($array_of_sessions['actions']); 

Tôi cảm thấy người quản lý phiên là người mà chúng tôi cần sử dụng để quản lý các phiên có xóa hoặc đọc và vùng chứa là một trong những thực thể được quản lý bởi người quản lý phiên.

Điều này có thể giúp những người khác sở hữu trong việc tạo đối tượng của mỗi vùng chứa phiên và gọi phương thức rõ ràng.

0

Để tiêu diệt tất cả các phiên họp:

$session = new Container('base'); 
    $session->getManager()->destroy(); 

    or 

sử dụng php đơn giản phá hủy chức năng:

session_destroy(); 

Chức năng này xóa tất cả các phiên họp.

Tôi hy vọng điều này sẽ hữu ích.

-2

Bạn có thể xóa phiên như thế này:

$ this-> từng phiên làm> exchangeArray (array());

-1

Trong ZF2, để sử dụng vùng chứa;

Tạo container:

$sessionTokenizer = new Container('token'); 

Set biến vào container

$token = $sessionTokenizer->token; 

Phá hủy container (CHỈ CONTAINER)

$sessionTokenizer->offsetUnset(); 
+1

Phương thức 'offsetUnset' có thông số bắt buộc' $ key' nên điều này không hoạt động – kachar

2

Sau đây là các chi tiết cho Phá hoại phiên trong Zend Framework 2:

  • Sử dụng cơ bản PHP Chức năng

    session_start() chức năng bắt đầu phiên.

    session_destroy() xóa chức năng TẤT CẢ dữ liệu được lưu trong mảng phiên.

Bây giờ sử dụng Zend Framework chức năng:

Đối với sự hiểu biết rõ ràng cho phép đầu tiên, tạo một phiên trong Zend Framework và sau đó tạo ra một quá trình Delete.

  1. Tạo phiên

sử dụng Zend \ Session \ container;

$ session_container = new Container ('user_session');

$ session_container-> last_login = date ('Y-m-d H: i: s');

$ session_container-> sess_token = trim (base64_encode (md5 (microtime())), "=");

  1. Xóa phiên

$ session = new container ("user_session");

$ session-> getManager() -> getStorage() -> clear ('user_session');

Nơi user_session là tên của khóa mảng phiên để lưu trữ chi tiết.

Các vấn đề liên quan