Zend 框架 - 会话管理


Session 是 Web 应用程序中一个非常重要的概念。它提供了在有限时间内将用户数据保留在 Web 服务器中的选项。Zend框架提供了一个单独的组件zend-session来处理会话信息。

安装会话组件

可以使用Composer安装会话组件,如下所示 -

composer require zendframework/zend-session 

会话组件

Zend 框架提供了六个组件来处理会话管理。所有这些组件均已解释如下 -

  • Zend\Session\Container - 读取和写入会话信息的主要 API。

  • Zend\Session\SessionManager - 它用于管理会话的整个生命周期。

  • Zend\Session\Storage - 用于指定会话数据如何存储在内存中。

  • Zend\Session\SaveHandler - 用于将会话数据存储和检索到物理位置,如 RDBMS、Redis、MangoDB 等。

  • Zend\Session\Validator - 用于通过交叉检查初始和后续请求的远程地址和用户代理来保护会话免受劫持。

  • Zend\Session\Config\SessionConfig - 用于配置会话的Behave方式。

默认配置足以处理会话。使用上述组件,可以轻松处理会话的各个方面。

会话组件示例

让我们按照以下几点来创建一个新页面来理解Zend框架中的会话。默认情况下,创建Container类的实例来管理会话就足够了。

  • TutorialController中创建一个新操作sessionAction

  • 初始化一个容器对象。

$c = new Container();
  • 检查是否存在任意键。如果该键不可用,则将计数初始化为值 1。如果可用,则增加该值,如以下代码所示。

if (!isset($c->count)) { 
   $c->count = 0; 
} else { 
   $c->count++; 
} 
  • 在 ViewModel 中注册计数。

  • 在 myapp/module/Tutorial/view/tutorial/tutorial/session.phtml 中创建 – sessionAction、session.phtml 的模板文件,然后渲染计数值

  • 刷新页面会增加会话中的计数值。完整列表如下 -

教程控制器.php

public function sessionAction() { 
   $c = new Container();  
   if (!isset($c->count)) { 
      $c->count = 0; 
   } else { 
      $c->count++; 
   }  
   $view = new ViewModel([ 
      'count' => $c->count, 
   ]);  
   return $view; 
}

会话.pthml

Session data, COUNT = <?= $this->count ?>

结果示例

Session data, Count = 5