Symfonyob娱乐下载 4.1新增功能:会话改进
2018年4月26日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
的某些用法要求::getSession ()
使用要求::getSession ()
在Symfony 4.1中已弃用,它将在Symfony 5.0中抛出异常。ob娱乐下载方法的会话是否存在,解决方案是始终首先检查要求::hasSession ()
方法:
1 2 3 4
/ /……如果($请求->hasSession() && ($会话=$请求->getSession ())) {$会话->集(“some_key”,“some_value”);}
允许缓存使用会话的请求
无论何时在请求期间启动会话,Symfony都会将响应转换为私有的不可缓存响应,以防止泄露私有信息。ob娱乐下载然而,在某些情况下,即使使用会话的请求也可以被缓存。
例如,可以为属于该组的所有用户缓存与某个用户组相关的信息。处理这些高级缓存场景超出了Symfony的范围,但是可以使用ob娱乐下载FOSHttpCacheBundle.
为了禁用默认的Symfony行为(使使用会话的请求不可缓存),在ob娱乐下载Symfony 4.1中我们添加了NO_AUTO_CACHE_CONTROL_HEADER
标题,您可以添加到响应:
1 2 3
使用ob娱乐下载\组件\HttpKernel\EventListener\AbstractSessionListener;$响应->头->集(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER,“真正的”);
允许迁移会话
迁移会话(例如从文件系统迁移到数据库)是一项棘手的操作,通常会丢失所有现有的会话。这就是为什么在Symfonyob娱乐下载 4.1中我们引入了一个新的MigratingSessionHandler
类以允许在新旧保存处理程序之间迁移而不丢失会话数据。
建议分三个步骤进行迁移:
12 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\HttpFoundation\会话\存储\处理程序\MigratingSessionHandler;$oldSessionStorage=……;$欧宝平台是合法的吗newSessionStorage=……;// MigratingSessionHandler($currentHandler, $writeOnlyHandler)//步骤1。是否在“垃圾收集时段”期间执行此操作以获取新存储中的所有会话$sessionStorage=新MigratingSessionHandler ($oldSessionStorage,$欧宝平台是合法的吗newSessionStorage);//步骤2。在验证新的存储处理程序是否按预期工作时执行此操作$sessionStorage=新MigratingSessionHandler ($欧宝平台是合法的吗newSessionStorage,$oldSessionStorage);//步骤3。您的应用程序现在已经准备好切换到新的存储处理程序$sessionStorage=$欧宝平台是合法的吗newSessionStorage;
发表在#生活在边缘
评论
大卫Bergunder
2018年4月26日说在14:14
会话迁移是一次性的事情吗(比如在部署后执行命令期间)?例如,如果应用程序现在主要使用redis,那么将会话从文件系统移动到redis只需要发生一次。
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
在第一个代码片段中有一个小小的拼写错误:$request->getSession中缺少圆括号。
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now