跳转到主要内容

和“
Drupal8
”有关的内容:

额外的笔者提醒思考以下问题:

缓存ID碰撞:

有没有可能两份数据出现同一个Cid呢?

其实是有可能的,但系统采取的措施很难遇到这样的情况,首先不同用途的数据已经分别被放在不同缓存Bin里面,即使碰撞也没有关系,再次数据会使用多个缓存上下文的组合,这降低了碰撞概率…

缓存上下文的用法:

缓存上下文的值是一个字符串数组,字符串是特定的,代表一种上下文,这个上下文用一个上下文对象实现,以容器的服务形式存在,加上“cache_context.”前缀就是它对应的容器服务id。

这个字符串经常被叫做“token”、上下文id、缓存上下文占位符等。…

在本系列之前写过《云客Drupal8源码分析之Session系统》,但那部分仅仅讲到了drupal8会话的基础:Symfony的Session组件

至于drupal怎么去使用这个基础就是本主题的内容,本主题是延续篇,将讲述drupal8的全部Session知识

请先看上篇,再继续

3:如果你直接从数据库下载会话数据,使用unserialize方法会产生错误,这是由于会话数据的序列化不同于serialize方法,可由 session.serialize_handler 指定

如果你很好奇想看一看数据库里面保存的会话数据请用辅助内容区的方法反序列化:

4:如何使用drupal8自己的会话对象:…

额外信息

1:在站点配置文件里面可以设置会话的访问更新阀值,也就是多长时间需要更新一次会话数据的最后访问时间

这个话有点绕,其实就是在会话的元数据包里面记录了会话的最后使用时间,源代码:$this->meta[self::UPDATED],这个时间保存在$_SESSION里…

现在我们知道了drupal8会话数据的存放,此外会话管理器用到了SessionConfiguration,这比较简单不多讲述。

drupal8会话延迟启动特性:

drupal8具备会话延迟启动功能,这个是drupal为了提高性能额外增加的,在Symfony中并没有

如果在请求中没有发现会话id那么不会启动会话…

在开始这个主题前我们做一个实验,在你的drupal8模块控制器中加一行代码:

file_put_contents("public://yunke.txt","Streams test");

然后访问这个控制器,看看发生了什么?没错页面上不会有什么改变,但也没有报告什么错误,那这行代码到底干了什么?

在drupal8中提供了两个页面缓存模块,一个是PageCache用于匿名访问时,一个是dynamic_page_cache用于处理任意用户的页面缓存。他们都有对应的请求策略及响应策略。

那么这两种策略如何运作?作用是什么呢?请看下面

先讲讲用于匿名用户的页面缓存 PageCache 的请求响应策略:…

drupal8默认提供了以下Backend:

Apcu4Backend、ApcuBackend、DatabaseBackend、MemoryBackend、MemoryCounterBackend、NullBackend、PhpBackend

此外有两个特殊的Backend:

BackendChain…

关于如何判断缓存数据是否过期及可缓存性质有三个概念:CacheMaxAge、CacheTags、CacheContexts
CacheMaxAge:代表缓存最大有效时长