9

这就是我设置会话的方式

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

这就是我杀死它的方式

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

但它仍然将 $this->sess->admin 保持为 '1' ...用户名消失了,但 admin 保持不变。删除与客户端关联的所有会话的正确方法是什么?

如果我做

$this->sess->admin = 0;

然后它可以工作,但我怀疑这是我持有的每个会话变量的正确方法。

我也试过

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

它没有用,它没有关闭任何会话。

4

3 回答 3

19

要删除与客户端关联的所有会话,请使用以下命令:

\Zend_Session::destroy( true );

这将删除整个会话,并向客户端发送标头请求以删除与会话关联的任何 cookie。您也可以将此方法的参数设置为 false 以不删除用户 cookie。但请注意:

Zend_Session::destroy(true) 必须在 PHP 发送 HTTP 头之前调用,或者必须启用输出缓冲。它将破坏与当前会话关联的所有持久数据。但是,PHP 中的变量不会受到影响,因此您的命名空间会话(Zend_Session_Namespace 的实例)仍然是可读的。

要删除这些,请使用以下方法:

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

请参阅此处了解更多信息

于 2012-05-09T12:01:57.137 回答
10

销毁特定会话

Zend_Session::namespaceUnset('user');
于 2012-05-09T12:02:46.403 回答
4

您可以使用

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

手册

于 2012-05-09T11:53:39.753 回答