在ZF2会议(Sessions in ZF2)

2019-07-17 14:09发布

你能告诉我如何正确使用ZF2会议? 到目前为止,我有这样的代码:

"session" =>
[
    "remember_me_seconds" => 2419200, 
    "use_cookies" => true,
    "cookie_httponly" => true
]

这是会话配置,我从一些张贴在这里对计算器复制。 现在,我应该把这个代码放到module.config.php使用会话或应用程序模块中的每个模块中?

public function onBootstrap(EventInterface $Event)
{
    $Config = $Event->getApplication()->getServiceManager()->get('Configuration');
    $SessionConfig = new SessionConfig();
    $SessionConfig->setOptions($Config['session']);
    $SessionManager = new SessionManager($SessionConfig);
    $SessionManager->start();  
    Container::setDefaultManager($SessionManager);
}

同样的问题与模块类的onBootstrap()方法。 如果这个代码进入每个模块的模块级或只是一旦进入应用程序的模块级?

在这两种情况下,我已经尝试了这两种方法,我甚至试图把这个代码放到这两个模块的一次,但我能做到的唯一的事情就是设置在控制器的构造函数会话变量,然后在动作/方法阅读。 我无法设置一个动作/方法的会话变量,然后在另一个读它。 如果我删除我在控制器的构造函数设置的变量行,我不能再看到这些会话变量。 会议刚的行为就像是创建并在每次请求页面时删除。

我缺少的东西吗? 请不要联系我的任何资源在互联网上,我看过他们所有,他们是不是真的有帮助。

Answer 1:

你不需要做任何配置中使用会话Zend框架2.当然,你可以更改设置,但如果你只是想得起来,并与会话中运行,那么不要担心现在。

我道歉,但我会无视你的最后一句话; 大约一个月前,我写了一个关于这个主题的文章以说明如何快速上手使用ZF2中使用会话的目的。 它不会在搜索引擎中排名靠前,因此机会是你没有看过它。

这里是展示它是如何做的代码片段。 如果你有兴趣它是如何工作的幕后,那么请参考上面的链接。

namespace MyApplication\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\Session\Container; // We need this when using sessions

class UserController extends AbstractActionController {
    public function loginAction() {
        // Store username in session
        $userSession = new Container('user');
        $userSession->username = 'Andy0708';

        return $this->redirect()->toRoute('welcome');
    }

    public function welcomeAction() {
        // Retrieve username from session
        $userSession = new Container('user');
        $username = $userSession->username; // $username now contains 'Andy0708'
    }
}


Answer 2:

关于会议

你想去哪儿来存储会话(在MySQL-DB,在蒙戈-DB,或在RAM中,..)? 如何会话分为“命名空间”之类

$_SESSION["namespace"]["user"],
$_SESSION["namespace_1"]["user"]?

SessionManager

在Zend中,Zend的\会议\ SessionManger帮你做很多如上所列什么

简单的配置为SessionManger

$sessionManager = new SessionManager();
$sessionStorage = new SessionArrayStorage();
$sessionManager->setStorage($sessionStorage);
//you can add more config, read document from Zend
$sessionContainer = new Container("ABC", $sessionManager);
$sessionContainer->offsetSet("user", "lehoanganh25991");

当你调用新的容器没有任何SessionManager配置

$sessionContainer = new Container("abc");

刘哲民的背后,Zend公司创建默认SessionManager,然后将它传递到集装箱

SessionArrayStorage,$ _SESSION

SessionArrayStorage在Zend公司可以用$ _SESSION工作,我们可以访问user通过上述

$_SESSION["ABC"]["user"]

如果设置其他存储器,如MySQL-DB,蒙戈 - 分贝,在RAM中,通过.. $ _SESSION访问可能无法正常工作

访问会话

在模块A中,设置会话

我们怎样才能访问它在Moudle B' 其中$ sessionContainer变量@@?

这很奇怪,但是当你要访问到这个容器,创建一个新的具有相同的配置

$sessionManager = new SessionManager();
$sessionStorage = new SessionArrayStorage();
$sessionManager->setStorage($sessionStorage);
$sessionContainer = new Container("ABC", $sessionManager);
//access
var_dump("get user from \$sessionContainer", $sessionContainer->offsetGet("user"));

在GitHub上的评论演示: https://github.com/hoanganh25991/zend-auth-acl/tree/d0a501e73ac763d6ef503bbde325723ea1868351

(通过提交,该项目改变了,访问这棵树)

in FronEnd\Controller\IndexController
in AuthAcl\Module.php
in AuthAcl\Service\SimpleAuth
i acces same session at different places


Answer 3:

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Session\Container;

class IndexController extends AbstractActionController
{   
    // set session values
    public function indexAction()
    {
       $session = new Container('User'); // name your session here by replacing User
$user_session->offsetSet('user_name', "your user name"); // set your session user name
$user_session->offsetSet('user_id', "1232"); //set your session user id
    }

// function to get values from session
  public function getdataAction(){
    $session = new Container('User');
    $user_name= $user_session->offsetGet('user_name'); // get user name from the session
   $user_id= $user_session->offsetGet('user_id'); // get user id from the session
}

// function to unset session values
 public function unsetdataAction(){
   $session = new Container('User');
    $user_session->offsetUnset('user_name'); // unset user name
        $user_session->offsetUnset('user_id');
}
} 


文章来源: Sessions in ZF2