Zend Framework - 会话管理



会话在 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** - 用于配置会话的行为方式。

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

会话组件示例

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

  • 在 **TutorialController** 中创建一个新的操作 **sessionAction**。

  • 初始化一个 **Container** 对象。

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

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

  • 为 sessionAction 创建一个模板文件 - session.phtml,位于 myapp/module/Tutorial/view/tutorial/tutorial/session.phtml,然后渲染 **count** 值。

  • 刷新页面将增加会话中 **count** 的值。完整的列表如下所示:

TutorialController.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; 
}

session.pthml

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

示例结果

Session data, Count = 5
广告