会话管理
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.4,不再维护。
考虑升级你的Symfony项目6.3。ob娱乐下载
会话管理
Symfob娱乐下载ony HttpFoundation组件有一个非常强大和灵活的会话提供会话管理子系统设计通过一个简单的面向对象的接口使用各种会话存储驱动程序。
通过简单的会话使用会话的实现SessionInterface接口。
谨慎
确保PHP会话之前不是已经开始使用会话类。如果你有一个遗留的会话系统,开始您的会话,明白了遗产会议。
简单的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用ob娱乐下载\组件\HttpFoundation\会话\会话;美元会话=新会话();美元会话- >开始();/ /设置和获取会话属性美元会话- >集(“名字”,“庄严赞歌”);美元会话- >get (“名字”);/ /设置闪光的消息美元会话- >getFlashBag ()- >add (“通知”,配置文件更新的);/ /检索消息foreach(美元会话- >getFlashBag ()- >get (“通知”,数组())作为美元消息){回声' < div class = " flash-notice”>“。美元消息。“< / div >”;}
请注意
ob娱乐下载Symfony会议旨在取代几个原生PHP函数。应用程序应该避免使用session_start ()
,session_regenerate_id ()
,session_id ()
,session_name ()
,session_destroy ()
而在以下部分中使用的api。
请注意
同时建议明确启动一个会话,会话会启动需求,也就是说,如果任何会话请求读/写会话数据。
谨慎
ob娱乐下载Symfony的会议是不相容的php . ini
指令会话。auto_start = 1
这个指令应该被关闭php . ini
在网络服务器指令或. htaccess
。
会话API
的会话类实现SessionInterface。
的会话有一个简单的API如下分成几组。
会议流程
- start ():启动会话-不要使用
session_start ()
; - 迁移():恢复会话ID -不要使用
session_regenerate_id ()
。这种方法可以改变新饼干的生命周期排放通过调用这个方法; - 无效():清除所有的会话数据和恢复会话ID,不要使用
session_destroy ()
; - getId ():获取会话ID。不要使用
session_id ()
; - setId ():设置会话ID。不要使用
session_id ()
; - getName ():获取会话名称。不要使用
session_name ()
; - setName ():设置会话名称。不要使用
session_name ()
。
会话属性
- 设置():设置一个属性的关键;
- get ():被关键属性;
- 所有():所有属性作为数组的键= >价值;
- 有():返回true,如果属性存在;
- 替换():设置多个属性:需要的数组和集合每个键= >值;
- remove ():删除一个属性的关键;
- clear ():清除所有属性。
内部存储的属性是“包”,一个PHP对象,就像一个数组。一些方法存在“袋”管理:
- registerBag ():注册一个SessionBagInterface;
- getBag ():获得一个SessionBagInterface包的名字;
- getFlashBag ():获得FlashBagInterface。这仅仅是一个方便的快捷方式。
会话的元数据
- getMetadataBag ():获得MetadataBag它包含关于会话的信息。
会话数据管理
PHP的会话管理的要求使用_SESSION美元
超全局变量,但是,这种影响有些代码的可测试性和封装在一个面向对象范例。为了帮助克服这一点,Symfony的用途ob娱乐下载会议包与会话来封装一个特定的数据集的属性或flash消息。
这种方法也降低中的命名空间污染_SESSION美元
超全局变量,因为每个包存储所有的数据在一个独特的名称空间。这允许Symfony和平ob娱乐下载共存可能使用与其他应用程序或库_SESSION美元
超全局变量和所有数据仍是完全兼容Symfony的会话管理。ob娱乐下载
ob娱乐下载Symfony提供了两种类型的存储袋,两个独立的实现。一切都是针对接口编写,这样你可以扩展或创建自己的包类型,如果必要的。
SessionBagInterface有以下API主要用于内部目的是:
- getStorageKey ():返回键袋将最终存储在数组
_SESSION美元
。通常这个值可以在其默认和供内部使用。 - 初始化():这就是所谓的内部通过Symfony会话存储类链接包数据会话。ob娱乐下载
- getName ():返回会话包的名称。
属性
袋的目的实现AttributeBagInterface是处理会话属性存储。这可能包括用户ID,并且记住我登录设置或基于其他用户的状态信息。
- AttributeBag这是标准的默认实现。
- NamespacedAttributeBag这个实现可以将属性存储在一个结构化的名称空间。
任何普通的键值存储系统是有限的复杂的数据可以存储在多大程度上因为每个键必须是唯一的。命名空间可以实现通过引入一个命名约定的关键应用程序的不同部分可以操作没有冲突。例如,module1.foo
和module2.foo
。然而,有时这不是非常实用的属性数据时是一个数组,例如一组标记。在这种情况下,管理该数组变成了一种负担,因为你需要检索数组然后再处理和存储:
1 2
美元令牌=数组(“令牌”= >数组(“一个”= >“a6c1e0b6”,“b”= >“f4a7b1f3”));
所以任何处理这可能很快变得丑陋,甚至简单地添加一个标记数组:
1 2 3
美元令牌=美元会话- >get (“令牌”);美元令牌(“c”]=美元价值;美元会话- >集(“令牌”,美元令牌);
与结构化的命名空间,关键可以翻译成这样的数组结构使用一个名称空间字符(默认为“/”):
1
美元会话- >集(“令牌/ c”,美元价值);
这样你可以很容易地直接访问存储阵列中的一个关键和轻松。
AttributeBagInterface有一个简单的API
Flash的消息
的目的FlashBagInterface是提供一种基于每个会话设置和检索消息。常见的工作流将flash消息请求和显示页面重定向之后。例如,一个用户提交一个表单,点击更新控制器,控制器处理后重定向页面更新的页面或者一个错误页面。闪光设置在前面的页面请求消息将立即显示在随后的页面加载的会话。这不过只是一个应用程序对flash的消息。
-
- AutoExpireFlashBag
- 在这个实现中,消息设置在一个页面加载都可以只显示在下一个页面加载。这些消息将自动过期不管是否他们检索。
-
- FlashBag
- 在这个实现中,消息将保留在会话中,直到他们被明确地检索或清除。这使它可以使用ESI缓存。
FlashBagInterface有一个简单的API
- add ():添加一个flash消息指定类型的栈;
- 设置()按类型:设置闪光;这种方法方便地将两个作为一个单一的消息
字符串
在一个或多个消息数组
。 - get ():被类型和清除那些闪光的闪光包;
- setAll ():集所有闪光,接受一个键数组的数组
类型= >阵列(消息)
; - 所有():获得所有闪光(键数组的数组)和清除的闪光袋;
- peek ():被类型(只读)闪光;
- peekAll ():获得所有闪光(只读)作为数组的键控阵列;
- 有():返回true,如果类型存在,虚假如果不是;
- 键():返回一个数组存储flash类型;
- clear ():清除袋;
对于简单的应用程序通常是足以有一个flash消息每类型,例如一个确认通知后提交表单。然而,flash消息由flash存储在一个数组键控美元的类型
这意味着您的应用程序可以发出多个消息对于一个给定的类型。这允许API用于更复杂的消息传递应用程序中。
设置多个闪光的例子:
1 2 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\HttpFoundation\会话\会话;美元会话=新会话();美元会话- >开始();/ /添加闪光的消息美元会话- >getFlashBag ()- >add (“警告”,你的配置文件是可写的,应该是只读的);美元会话- >getFlashBag ()- >add (“错误”,“未能更新名称”);美元会话- >getFlashBag ()- >add (“错误”,另一个错误的);
显示flash可能看起来如下所示的消息。
简单,显示一种类型的消息:
1 2 3 4 5 6 7 8 9
/ /显示警告foreach(美元会话- >getFlashBag ()- >get (“警告”,数组())作为美元消息){回声' < div class = " flash-warning”>“。美元消息。“< / div >”;}/ /显示错误foreach(美元会话- >getFlashBag ()- >get (“错误”,数组())作为美元消息){回声' < div class = " flash-error”>“。美元消息。“< / div >”;}
紧凑的方法处理一次显示所有闪光:
1 2 3 4 5
foreach(美元会话- >getFlashBag ()- >所有()作为美元类型= >美元消息){foreach(美元消息作为美元消息){回声' < div class = " flash - '。美元类型。“>”。美元消息。“< / div >”;}}