会话
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.4,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
会话
欧宝娱乐app下载地址Symfony提供了一个会话对象和几个实用程序,您可以使用它来存储用户请求之间的信息。
配置
会议提供的HttpFoundation组件包含在所有Symfony应用程序,无论你如何安装它。欧宝娱乐app下载地址在使用会话之前,检查他们的默认配置:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11
#配置/包/ framework.yaml框架:#允许会话的支持。注意,会议才会开始如果你读或写。#删除或注释本节明确禁用会话的支持。会话:#服务用于会话的ID存储# NULL意味着Symfony使用欧宝娱乐app下载地址PHP默认会话机制handler_id:零#提高用于会话cookie的安全性cookie_secure:汽车cookie_samesite:宽松的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
< !——配置/包/框架。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:框架=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/symfony //www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd”><框架:配置>< !——使会话的支持。注意,会议才会开始如果你读或写。删除或注释本节明确禁用会话的支持。handler-id:服务用于会话的ID存储零意味着Symfony使用PHP默认会话机制cookie-secure cookie-samesi欧宝娱乐app下载地址te:改善饼干用于会话的安全性- - ><框架:会话handler-id=“零”cookie-secure=“汽车”cookie-samesite=“宽松”/ >< /框架:配置>< /容器>
1 2 3 4 5 6 7 8 9 10 11 12 13
/ /配置/包/ framework.php美元容器- >loadFromExtension (“框架”,(/ /启用会话的支持。注意,会议才会开始如果你读或写。/ /删除或注释本节明确禁用会话的支持。“会话”= > [/ /服务用于会话的ID存储/ /零意味着Symfony使用PHP欧宝娱乐app下载地址默认会话机制“handler_id”= >零,/ /改善的安全用于会话cookie“cookie_secure”= >“汽车”,“cookie_samesite”= >“宽松”、]]);
设置handler_id
配置选项零
意味着Symfony将欧宝娱乐app下载地址使用本机PHP会话机制。会话元数据文件将存储在Symfony应用程序,在一个目录由PHP控制。欧宝娱乐app下载地址虽然这通常简化,一些会话过期相关选项可能不会像预期的那样工作,如果其他应用程序写入相同的目录中有短马克思一生中设置。
如果你喜欢,你可以使用session.handler.native_file
服务handler_id
让Symfon欧宝娱乐app下载地址y管理会议本身。另一个有用的选项是save_path
,它定义了目录Symfony将存储会话的元数据文件:欧宝娱乐app下载地址
- 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 % '
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
< !——配置/包/框架。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:框架=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/symfony //www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd”><框架:配置><框架:会话启用=“真正的”handler-id=“session.handler.native_file”节省路径=“% kernel.project_dir % / var /会议/ % kernel.environment %”/ >< /框架:配置>< /容器>
1 2 3 4 5 6 7 8
/ /配置/包/ framework.php美元容器- >loadFromExtension (“框架”,(“会话”= > [/ /……“handler_id”= >“session.handler.native_file”,“save_path”= >' % kernel.project_dir % / var /会议/ % kernel.environment % '、]]);
看看Symfony的配置更多欧宝娱乐app下载地址地了解其他可用的引用会话配置选项。你也可以会话存储在一个数据库中。
基本用法
欧宝娱乐app下载地址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
使用欧宝娱乐app下载地址\组件\HttpFoundation\会话\SessionInterface;类SomeService{私人美元会话;公共函数__construct(SessionInterface美元会话){美元这- >会话=美元会话;}公共函数someMethod(){/ /将一个属性存储在会话为以后重用美元这- >会话- >集(“属性名称”,“属性-值”);/ /获取一个属性的名字美元喷火=美元这- >会话- >get (“foo”);/ /第二个参数是属性不存在时返回的值美元过滤器=美元这- >会话- >get (“过滤器”[]);/ /……}}
提示
每一个SessionInterface
实现的支持。如果你有自己的实现,type-hint这个论点。
存储属性保留在会话用户会话的其余部分。默认情况下,会话属性键值对的管理AttributeBag类。
如果您的应用程序需要很复杂,你可能更愿意使用名称空间会话属性管理的NamespacedAttributeBag类。在使用它们之前,覆盖会话
服务定义来代替默认的AttributeBag
由NamespacedAttributeBag
:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8
#配置/ services.yaml会话:公众:真正的类:欧宝娱乐app下载地址Symfony \ HttpFoundation \会议\会议\组件参数:(“@session.storage”,“@session.namespacedattributebag”,“@session.flash_bag”]session.namespacedattributebag:类:欧宝娱乐app下载地址Symfony组件\ \ HttpFoundation \会议\ \ NamespacedAttributeBag属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
< !——配置/服务。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“会话”类=“欧宝娱乐app下载地址Symfony组件\ \ HttpFoundation \会议\会话”公共=“真正的”><论点类型=“服务”id=“session.storage”/ ><论点类型=“服务”id=“session.namespacedattributebag”/ ><论点类型=“服务”id=“session.flash_bag”/ >< /服务><服务id=“session.namespacedattributebag”类=“欧宝娱乐app下载地址Symfony \ HttpFoundation \会议\ \组件属性\ NamespacedAttributeBag”/ >< /服务>< /容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ /配置/ services.php名称空间欧宝娱乐app下载地址\组件\DependencyInjection\加载程序\配置器;使用欧宝娱乐app下载地址\组件\HttpFoundation\会话\属性\NamespacedAttributeBag;使用欧宝娱乐app下载地址\组件\HttpFoundation\会话\会话;返回函数(ContainerConfigurator美元配置器){美元服务=美元配置器- >服务();美元服务- >集(“会话”、会话::类)- >公共()- >args (ref (“session.storage”),裁判(“session.namespacedattributebag”),裁判(“session.flash_bag”)));美元服务- >集(“session.namespacedattributebag”,NamespacedAttributeBag::类);};
避免对匿名用户会话开始
会话是自动启动时读、写,甚至检查会话中的数据的存在。这可能伤害你的应用程序的性能,因为所有的用户将获得一个会话cookie。为了防止这一点,你必须的完全避免访问会话。