2012-05-09 29 views
7

Đây là cách tôi đặt phiênLàm thế nào để giết đúng các phiên trong khung công tác zend?

$this -> sess = new Zend_Session_Namespace('user'); 
$this -> sess -> username = "Bob"; 
$this -> sess -> admin = "1"; 

Và đây là cách tôi giết nó

setcookie("mycookiename",md5(rand(10,1200)),time() - (60 * 60),"/",".site.com"); 
$_SESSION = array(); 
session_destroy(); 
$this -> _redirect('/'); 

nhưng nó vẫn giữ nguyên $ this-> sess-> admin như '1' ... Tên truy nhập đã biến mất nhưng quản trị vẫn là một. Cách chính xác để xóa TẤT CẢ các phiên liên kết với khách hàng là gì?

Nếu tôi làm

$this->sess->admin = 0; 

Sau đó nó hoạt động, nhưng tôi nghi ngờ đây là một cách đúng đắn cho mỗi biến phiên mà tôi giữ.

Tôi cũng đã cố gắng

setcookie("mycookiename",md5(rand(10,1200)),time() - (60 * 60),"/",".site.com"); 
Zend_Session::namespaceUnset($this->sess); 

và nó đã không làm việc, nó đã không đóng bất kỳ phiên.

+0

'Zend_Session :: namespaceUnset ($ this-> sess) ' kết quả đầu tiên trên google – Esailija

+0

Như vậy? setcookie ("sl", md5 (rand (10,1200)), thời gian() - (60 * 60), "/", ". Site.com"); \t Zend_Session :: namespaceUnset ($ this-> sess); Nó không hoạt động. – Darius

Trả lời

17

Để xóa ALL phiên liên quan đến việc sử dụng của khách hàng này:

\Zend_Session::destroy(true); 

này sẽ xóa toàn bộ phiên và cũng có thể gửi yêu cầu tiêu đề cho khách hàng để xóa mọi cookie được liên kết với phiên. Bạn cũng có thể đặt tham số của phương thức này thành false để không xóa cookie của người dùng. Nhưng xin lưu ý:

Zend_Session :: hủy (true) phải được gọi trước khi PHP gửi tiêu đề HTTP hoặc bộ đệm đầu ra phải được bật. Nó sẽ hủy tất cả của dữ liệu liên tục được liên kết với phiên hiện tại. Tuy nhiên, không có biến nào trong PHP bị ảnh hưởng, do đó, các phiên không có tên của bạn (các phiên bản của Zend_Session_Namespace) vẫn có thể đọc được.

Để loại bỏ những sử dụng phương pháp sau đây:

$ns = 'auth' 
$namespace = new \Zend_Session_Namespace($ns); 
$namespace->unsetAll(); 

Please see here for further information

4

Bạn có thể sử dụng

Zend_Session::destroy($remove_cookie = true, $readonly = true); 

Xem manual

+0

Cảm ơn bạn !! Phương pháp này hiệu quả. – Darius

+2

@darius Thật đáng ngạc nhiên khi bạn có thể tìm hiểu bằng cách đọc [manual] (http://framework.zend.com/manual/en/reference.html). Tôi không biết làm thế nào để làm điều đó trước khi đọc câu hỏi của bạn. – vascowhite

+0

Tôi mới tham gia Zend Framework và đang thử các phương pháp trên trang web này http://zendgeek.blogspot.com/2009/07/zend-framework-session-usage-and.html nhưng họ đã không làm việc cho tôi, vì vậy tôi nghĩ có lẽ tôi đã đặt mã trong phần sai hoặc một cái gì đó. Và các hướng dẫn sử dụng confuses tôi ở lần, có lẽ tôi không cắt ra cho công cụ lập trình này lol. Cảm ơn bạn một lần nữa. – Darius

10

Để phá hủy phiên đặc biệt làm

Zend_Session::namespaceUnset('user'); 
+0

Đó có lẽ là một lựa chọn tốt hơn so với tôi trong trường hợp này. +1 – vascowhite

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