会话
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.3,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 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使用P欧宝娱乐app下载地址HP默认会话机制handler_id:零#提高用于会话的cookie的安全性cookie_secure:“汽车”cookie_samesite:“宽松”
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
<!--config/packages/framework.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”><框架:配置><!--启用:enables the support of sessions in the app handler-id: ID of the service used for session storage NULL means that Symfony uses PHP default session mechanism cookie-secure and cookie-samesite: improves the security of the cookies used for sessions --><框架:会话启用=“真正的”handler-id=“零”cookie-secure=“汽车”cookie-samesite=“宽松”/>框架:配置>容器>
12 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /配置/包/ framework.php使用欧宝娱乐app下载地址\配置\FrameworkConfig;返回静态函数(FrameworkConfig$框架){$框架->会话()//在应用程序中启用会话支持->启用(真正的)//会话存储服务ID// NULL表示Symfony使用P欧宝娱乐app下载地址HP默认会话机制->handlerId (零)//提高会话使用cookie的安全性->cookieSecure (“汽车”)->cookieSamesite (“宽松”);};
设置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 % '
12 3 4 5 6 7 8 9 10 11 12 13 14 15
<!--config/packages/framework.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 9 10
/ /配置/包/ framework.php使用欧宝娱乐app下载地址\配置\FrameworkConfig;返回静态函数(FrameworkConfig$框架){$框架->会话()/ /……->handlerId (“session.handler.native_file”)->savePath (' % kernel.project_dir % / var /会议/ % kernel.environment % ');};
查看Symfony配置参考以欧宝娱乐app下载地址了解更多关于其他可用配置的信息会话配置选项.你也可以将会话存储在数据库中.
基本用法
会话可以通过Request和RequestStack访问。欧宝娱乐app下载地址Symfony提供了一个request_stack服务,如果您输入一个参数,该服务将被注入到服务和控制器中RequestStack:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
使用欧宝娱乐app下载地址\组件\HttpFoundation\RequestStack;类SomeService{私人$requestStack;公共函数__construct(RequestStack$requestStack){$这->requestStack =$requestStack;}公共函数someMethod(){$会话=$这->requestStack->getSession ();//在会话中存储属性以供以后重用$会话->集(“属性名称”,“属性-值”);//通过名称获取属性$喷火=$会话->get (“foo”);//第二个参数是属性不存在时返回的值$过滤器=$会话->get (“过滤器”[]);/ /……}}
5.3
的SessionInterface
而且会话
服务在Symfony 5.3中已弃用。欧宝娱乐app下载地址相反,注入RequestStack
服务获取当前请求的会话对象。
存储的属性在该用户会话的剩余时间内保留在会话中。属性管理的键值对AttributeBag类。
5.3
的NamespacedAttributeBag
类自Symfony 5.3起已弃用。欧宝娱乐app下载地址如果您需要这个特性,就必须自己实现这个类。
如果您的应用程序需求比较复杂,您可能更喜欢使用命名空间会话属性哪些是用NamespacedAttributeBag类。在使用它们之前,重写session_listener
服务定义来构建您的会话
对象。AttributeBag
由NamespacedAttributeBag
:
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12
#配置/ services.yamlsession.factory:可以使用autoconfigure:真正的类:App \会议\ SessionFactory参数:-“@request_stack”-“@session.storage.factory”-[' @session_listener ',“onSessionUsage”]-“@session.namespacedattributebag”session.namespacedattributebag:类:欧宝娱乐app下载地址Symfony组件\ \ HttpFoundation \会议\ \ NamespacedAttributeBag属性
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<!--config/services.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”/>服务>容器>
12 3 4 5 6 7 8 9 10 11 12 13 14 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。为了防止这种情况,你必须完全避免访问会话。