如何在zf2中使用Zend\Session?

rdo*_*rdo 29 php session zend-framework2

有人试过zf2吗?我无法理解在zf2中使用会话的新机制.如何在新的zend框架中编写和读取会话?

我也在互联网上找不到任何例子.

rdo*_*rdo 68

zf2会话使用的一些示例:

会话创建:

use Zend\Session\Container;
$session = new Container('base');
Run Code Online (Sandbox Code Playgroud)

检查会话中是否存在密钥:

$session->offsetExists('email')
Run Code Online (Sandbox Code Playgroud)

通过密钥从会话中获取价值:

$email = $session->offsetGet('email');
Run Code Online (Sandbox Code Playgroud)

在会话中设置值:

$session->offsetSet('email', $email);
Run Code Online (Sandbox Code Playgroud)

在会话中取消设置值:

$session->offsetUnset('email');
Run Code Online (Sandbox Code Playgroud)

其他简单的会话方式是:

$session = new Container('foo');
Run Code Online (Sandbox Code Playgroud)

//这些都是相同目的的同等手段

$session['bar'] = 'foobar';

$session->bar = 'foobar';

$session->offsetSet('bar', 'foobar'); 
Run Code Online (Sandbox Code Playgroud)

  • 哦,请不要直接使用**ArrayAccess**的方法.这是moveton.`Zend\Session\Container`也实现了自定义**ArrayObject**,这意味着您可以设置,获取和检查属性,就像使用对象一样.请参阅上面的答案 (10认同)

dVa*_*ion 17

肯定是的,你应该使用Zend\Session\Container

Array的 Container扩展并使用ARRAY_AS_PROPSflag 实例化,这意味着您可以轻松地遍历属性并读取/写入它们,例如

use Zend\Session\Container as SessionContainer;

$this->session = new SessionContainer('post_supply');
$this->session->ex = true;
var_dump($this->session->ex);
Run Code Online (Sandbox Code Playgroud)

第一个参数是session namespace,第二个是Manager.Manager是一个外观Storage,SaveHandler并且它配置ConfigInterface为将会话数据保存在DB或Memcache服务器中.