会话

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.3,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

会话

ob娱乐下载Symfony提供了一个会话对象和几个实用程序,您可以使用它来存储用户请求之间的信息。

配置

会议提供的HttpFoundation组件包含在所有Symfony应用程序,无论你如何安装它。ob娱乐下载在使用会话之前,检查他们的默认配置:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11
#配置/包/ framework.yaml框架:会话:#允许在应用程序会话的支持启用:真正的#服务用于会话的ID存储。# NULL =意味着PHP使用默认的会话机制handler_id:#提高用于会话cookie的安全性cookie_secure:“汽车”cookie_samesite:“宽松”

设置handler_id配置选项意味着Symfony将ob娱乐下载使用本机PHP会话机制。会话元数据文件将存储在Symfony应用程序,在一个目录由PHP控制。ob娱乐下载虽然这通常简化,一些会话过期相关选项可能不会像预期的那样工作,如果其他应用程序写入相同的目录中有短马克思一生中设置。

如果你喜欢,你可以使用session.handler.native_file服务handler_id让Symfonob娱乐下载y管理会议本身。另一个有用的选项是save_path,它定义了目录Symfony将存储会话的元数据文件:ob娱乐下载

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
#配置/包/ framework.yaml框架:会话:#……handler_id:“session.handler.native_file”save_path:' % kernel.project_dir % / var /会议/ % kernel.environment % '

看看Symfony的配置更多ob娱乐下载地了解其他可用的引用会话配置选项。同样,如果你喜欢会话元数据存储在数据库而不是文件系统,看看这篇文章:如何使用PdoSessionHandler在数据库中存储会话吗

基本用法

ob娱乐下载Symfony提供了一个会话服务,注入你的服务和控制器如果你type-hint论证SessionInterface:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25
使用ob娱乐下载\组件\HttpFoundation\会话\SessionInterface;SomeService{私人美元会话;公共函数__construct(SessionInterface美元会话){美元- >会话=美元会话;}公共函数someMethod(){/ /将一个属性存储在会话为以后重用美元- >会话- >集(“属性名称”,“属性-值”);/ /获取一个属性的名字美元喷火=美元- >会话- >get (“foo”);/ /第二个参数是属性不存在时返回的值美元过滤器=美元- >会话- >get (“过滤器”[]);/ /……}}

提示

每一个SessionInterface实现的支持。如果你有自己的实现,type-hint这个论点。

存储属性保留在会话用户会话的其余部分。默认情况下,会话属性键值对的管理AttributeBag类。

如果您的应用程序需要很复杂,你可能更愿意使用名称空间会话属性管理的NamespacedAttributeBag类。在使用它们之前,覆盖会话服务定义来代替默认的AttributeBagNamespacedAttributeBag:

  • YAML
1 2 3 4 5 6 7 8
#配置/ services.yaml会话:公众:真正的类:ob娱乐下载Symfony \ HttpFoundation \会议\会议\组件参数:(“@session.storage”,“@session.namespacedattributebag”,“@session.flash_bag”]session.namespacedattributebag:类:ob娱乐下载Symfony组件\ \ HttpFoundation \会议\ \ NamespacedAttributeBag属性

避免对匿名用户会话开始

会话是自动启动时读、写,甚至检查会话中的数据的存在。这可能伤害你的应用程序的性能,因为所有的用户将获得一个会话cookie。为了防止这一点,你必须的完全避免访问会话。

例如,如果您的模板包括一些代码来显示flash的消息,会议将开始,即使用户没有登录,即使你还没有创建任何flash的消息。为了避免这种行为,添加一个试图访问flash消息前检查:

1 2 3 4 5 6 7 8
{#这张支票可以防止一个会话开始时没有flash消息#}{%如果app.request。hasPreviousSession %}{%消息在app.flashes(“通知”)%}<div=“flash-notice”>{{消息}}< /div>{%endfor%}{%endif%}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
< /article>