在本系列之前写过《云客Drupal源码分析之Session系统》,但那部分仅仅讲到了drupal会话的基础:Symfony的Session组件
至于drupal怎么去使用这个基础就是本主题的内容,本主题是延续篇,将讲述drupal的全部Session知识
请先看上篇,再继续
关于drupal的Session代码除了Symfony的Session组件外,全部都放在了:\core\lib\Drupal\Core\Session
在这个文件夹里不仅仅存放了Session的核心代码,还存放了和用户账户相关的一些代码,因为登陆多和Session有关。
drupal系统的Session子系统是何时初始化并注入到请求对象中的呢?
这个工作是在Drupal\Core\StackMiddleware\Session里完成的,也就是http堆栈中的http_middleware.session层
详情请见本系列前面的《云客Drupal8源码分析之HttpKernel堆栈》
一切从这里开始:$this->container->get("session"); (其实源代码为:$session = $this->container->get($this->sessionServiceName);)
我们来看一看session服务的定义:
使用了类:Symfony\Component\HttpFoundation\Session\Session 有三个参数:
服务:session_manager
属性包:Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag
闪存包:Symfony\Component\HttpFoundation\Session\Flash\FlashBag
(还不知道如何看运行时容器的容器定义数据吗?请见本系列前文的服务容器主题末尾部分)
可见基本使用了Symfony的Session组件,但不同的是使用了不同的SessionStorage 储存管理器
Session处理的核心就是这个储存管理器,它就是本主题的重点,在drupal8的源代码中作者注释到使用SessionStorage
这