会话管理
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.4,不再维护。
考虑升级你的Symfony项目6.2。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
在web服务器的指令或. 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 ()
。
会话属性
内部会话属性存储在一个“包”,一个PHP对象,就像一个数组。他们可以设置、删除检查等使用方法在本文后面的解释AttributeBagInterface
类。看到会话管理。
此外,一些方法存在“袋”管理:
- 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 ()
- 返回会话包的名称。
- clear ()
- 清除数据从袋子里。
属性
袋的目的实现AttributeBagInterface是处理会话属性存储。这可能包括用户ID,和“记住我”登录设置或基于其他用户的状态信息。
- AttributeBag
- 这是标准的默认实现。
- NamespacedAttributeBag
- 这个实现可以将属性存储在一个结构化的名称空间。
- 设置()
-
设置一个属性的名称(
集(“名字”,“价值”)
)。 - get ()
-
获取一个属性的名称(
get(名字)
),可以定义一个默认值,当属性不存在(get(“名字”,“default_value”)
)。 - 所有()
-
所有属性的关联数组
名称= >值
。 - 有()
-
返回
真正的
如果属性的存在。 - 替换()
-
设置多个属性使用关联数组(
名称= >值
)。如果属性存在,他们所取代;如果不是这样,他们创建。 - remove ()
- 删除一个属性的名称和返回其值。
- clear ()
- 删除所有属性。
例子:
1 2 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\HttpFoundation\会话\属性\AttributeBag;使用ob娱乐下载\组件\HttpFoundation\会话\会话;使用ob娱乐下载\组件\HttpFoundation\会话\存储\NativeSessionStorage;美元会话=新会话(新NativeSessionStorage (),新AttributeBag ());美元会话- >集(“令牌”,“a6c1e0b6”);/ /……美元令牌=美元会话- >get (“令牌”);/ /如果该属性可能会或可能不会存在,您可以定义一个默认值美元令牌=美元会话- >get (“属性名称”,“default-attribute-value”);/ /……美元会话- >明确的();
名称空间属性
任何普通的键值存储系统是有限的复杂的数据可以存储在多大程度上因为每个键必须是唯一的。命名空间可以实现通过引入一个命名约定的关键应用程序的不同部分可以操作没有冲突。例如,module1.foo
和module2.foo
。然而,有时这不是非常实用的属性数据时是一个数组,例如一组标记。在这种情况下,管理该数组变成了一种负担,因为你需要检索数组然后再处理和存储:
1 2 3 4 5 6
美元令牌= (“令牌”= > [“一个”= >“a6c1e0b6”,“b”= >“f4a7b1f3”]];
所以任何处理这可能很快变得丑陋,甚至向数组中添加一个标记:
1 2 3
美元令牌=美元会话- >get (“令牌”);美元令牌(“c”]=美元价值;美元会话- >集(“令牌”,美元令牌);
与结构化的命名空间,可以翻译的关键数组结构这样的字符(默认为使用一个名称空间/
):
1 2 3 4 5
/ /……使用ob娱乐下载\组件\HttpFoundation\会话\属性\NamespacedAttributeBag;美元会话=新会话(新NativeSessionStorage (),新NamespacedAttributeBag ());美元会话- >集(“令牌/ c”,美元价值);
Flash的消息
的目的FlashBagInterface是提供一种基于每个会话设置和检索消息。常见的工作流将flash消息请求和显示页面重定向之后。例如,一个用户提交一个表单,点击更新控制器,控制器处理后重定向页面更新的页面或者一个错误页面。闪光设置在前面的页面请求消息将立即显示在随后的页面加载的会话。这不过只是一个应用程序对flash的消息。
- AutoExpireFlashBag
- 在这个实现中,消息设置在一个页面加载都可以只显示在下一个页面加载。这些消息将自动过期不管是否他们检索。
- FlashBag
- 在这个实现中,消息将保留在会话中,直到他们被明确地检索或清除。这使它可以使用ESI缓存。
- 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 >”;}}