配置会话并保存处理程序
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.1,不再维护。
考虑升级你的Symfony项目6.3。ob娱乐下载
配置会话并保存处理程序
本节讨论如何配置会话管理和微调您的特定需求。这个文档包欧宝官网下载app括节省处理器,存储和检索会话数据,配置会话行为。
保存处理程序
PHP会话工作流有6个可能的操作可能发生的。正常的会话之前开放
,读
,写
和关闭
的可能性摧毁
和gc
(垃圾收集将任何旧会话到期:gc
被称为随机根据PHP的配置如果叫,之后调用吗开放
操作)。你可以阅读更多关于这个php.net/session.customhandler
原生PHP保存处理程序
所谓的“本地”处理程序,是保存处理程序编译成PHP或提供的PHP扩展,如PHP-Sqlite PHP-Memcached等等。
所有本地保存处理程序内部PHP,因此,没有面临的公共API。他们必须通过PHP ini配置指令,通常session.save_path
和潜在的其他司机具体指示。具体细节可以在docblock找到的setoption ()
每个类的方法。
在本机保存处理程序可以直接激活使用报错(“会话。save_handler’,美元的名字);
,Sob娱乐下载ymfony2提供了一种方便的方法来激活这些相同的方式自定义处理程序。
ob娱乐下载Symfony2提供司机以下本地保存处理程序为例:
使用示例:
1 2 3 4 5 6
使用ob娱乐下载\组件\HttpFoundation\会话\会话;使用ob娱乐下载\组件\HttpFoundation\会话\存储\NativeSessionStorage;使用ob娱乐下载\组件\HttpFoundation\会话\存储\处理程序\NativeFileSessionHandler;美元存储=新NativeSessionStorage (数组(),新NativeFileSessionHandler ());美元会话=新会话(美元存储);
请注意
的异常文件
处理程序内置PHP和总是可用,其他处理程序的可用性取决于这些PHP扩展思想活跃在运行时。
请注意
本地保存会话存储处理程序提供一个快速解决方案,但是,在你需要更多控制的复杂系统,自定义保存处理程序可能提供更多的自由和灵活性。ob娱乐下载Symfony2提供了一些你可能会进一步实现定制的要求。
自定义保存处理程序
自定义处理程序是那些完全取代PHP的内置的PHP会话保存处理程序通过提供六回调函数调用内部各点在会话中工作流。
ob娱乐下载Symfony2 HttpFoundation默认提供了一些,这些可以很容易地作为如果你想编写自己的例子。
使用示例:
1 2 3 4 5 6
使用ob娱乐下载\组件\HttpFoundation\会话\会话;使用ob娱乐下载\组件\HttpFoundation\会话\存储\NativeSessionStorage;使用ob娱乐下载\组件\HttpFoundation\会话\存储\处理程序\PdoSessionHandler;美元存储=新NativeSessionStorage (数组(),新PdoSessionHandler ());美元会话=新会话(美元存储);
配置PHP会话
的NativeSessionStorage可以配置的大多数PHP ini配置指令的记录吗php.net/session.configuration。
配置这些设置,通过键(省略初始会话。
关键的一部分)作为一个键-值的数组选择美元
构造函数参数。或者让他们通过setoption ()方法。
为了清晰,一些关键选项解释在这个文档。欧宝官网下载app
会话Cookie一生
出于安全、会话令牌通常建议发送会话cookie。您可以配置会话cookie的一生通过指定生命周期(以秒为单位)使用cookie_lifetime
关键在构造函数中选择美元
论点NativeSessionStorage。
设置一个cookie_lifetime
来0
只会导致饼干生活只要浏览器仍然开放。一般来说,cookie_lifetime
将被设置为一个相对大量的几天,几周或几个月。并不少见,饼干一年或更多的取决于应用程序。
因为会话cookie仅仅是一个客户端令牌,他们不太重要的控制你的安全设置的细节最终只能安全地从服务器端控制。
请注意
的cookie_lifetime
设置cookie应该活的秒数,它不是一个Unix时间戳。由此产生的会话cookie将印有一个失效时间时间()
+cookie_lifetime
从服务器时间是在那里拍的。
配置垃圾收集
当一个会话打开时,PHP调用gc
根据设定的概率随机处理程序session.gc_probability
/session.gc_divisor
。例如,如果这些被设置5/100
分别,这意味着5%的概率。同样的,3/4
意味着一个3 4的机会,即75%。
如果垃圾收集处理程序被调用时,PHP将值存储在PHP ini指令session.gc_maxlifetime
。意思在这种情况下,任何存储会话保存超过maxlifetime
前应该被删除。这允许一个过期的记录基于空闲时间。
通过您可以配置这些设置gc_probability
,gc_divisor
和gc_maxlifetime
在构造函数的数组NativeSessionStorage或setoption ()方法。
会话的生命周期
当创建一个新的会话,这意味着Symfony2问题一个新的客户端会话cookieob娱乐下载, cookie将印有一个失效时间。这是通过添加PHP运行时配置价值计算session.cookie_lifetime
与当前服务器时间。
请注意
PHP将只发行一次饼干。预计客户端存储,饼干为整个一生。发布新的饼干只会销毁会话时,浏览器cookie被删除,或会话ID是再生使用迁移()
或无效()
的方法会话
类。
最初的饼干一生可以通过配置设置NativeSessionStorage
使用setoption(数组(cookie_lifetime = > 1234))
方法。
请注意
一个cookie的一生0
意味着饼干到期当浏览器关闭。
会话空闲时间/保持活着
通常情况下,你可能想要保护,或者减少未经授权使用一个会话当用户步骤远离他们的终端同时登录通过破坏一段空闲时间后的会话。例如,它是常见的银行应用程序的登录用户不活动的后5到10分钟。设置cookie的一生中这是不合适的,因为客户机可以操作的,所以我们必须在服务器端做到期。最简单的方法是通过垃圾收集运行实现这个相当频繁。饼干一生
将被设置为一个相对较高的值,和垃圾收集maxlifetime
将被设置为破坏会话在任何所需的空闲时间。
另一种选择是专门检查会话开始后的会话已经过期。会话可以根据需要被摧毁。这种处理方法允许会话期满可以集成到用户体验,例如,通过显示一条消息。
ob娱乐下载Symfony2记录一些关于每个会话的基本元数据在这方面给你完全的自由。
会话的元数据
会话是装饰着一些基本的元数据,使精细控制的安全设置。会话对象有一个getter的元数据,getMetadataBag ()公开的实例MetadataBag:
1 2
美元会话- >getMetadataBag ()- >getCreated ();美元会话- >getMetadataBag ()- >getLastUsed ();
这两种方法都返回一个Unix时间戳(相对于服务器)。
可以使用该元数据访问明确一个会话过期,例如:
1 2 3 4 5
美元会话- >开始();如果(()——的时候了美元会话- >getMetadataBag ()- >getLastUsed () >美元maxIdleTime){美元会话- >无效();扔新SessionExpired ();/ /重定向会话过期页面}
还可以告诉的cookie_lifetime
将特定cookie通过阅读吗getLifetime ()
方法:
1
美元会话- >getMetadataBag ()- >getLifetime ();
饼干的失效时间可以确定通过添加时间戳和一生中创建的。
PHP 5.4兼容性
自PHP 5.4.0,SessionHandler和SessionHandlerInterface是可用的。ob娱乐下载Symfony 2.1提供了向前兼容性SessionHandlerInterface所以它可以使用PHP 5.3。这大大提高了互操作性与其他库。
SessionHandlerPHP是一种特殊的内部类公开本机PHP处理程序保存到用户空间。
为了提供一个解决方案对于那些使用PHP 5.4, Symfony2有着特殊的类调用ob娱乐下载NativeSessionHandler在PHP 5.4,从“SessionHandler”和在PHP 5.3只是一个空基类。这提供了一些有趣的机会利用PHP 5.4功能(如果可用)。
节省处理器代理
有两种类型的保存处理程序类继承的代理AbstractProxy:他们是NativeProxy和SessionHandlerProxy。
NativeSessionStorage自动注入存储处理器为节省处理器代理,除非已经包装。
NativeProxy使用PHP内部保存时自动在PHP 5.3处理程序是使用“本地* SessionHandler”类,指定SessionHandlerProxy将用于包装任何自定义保存处理程序,实现了吗SessionHandlerInterface。
从PHP 5.4及以上,所有会话处理程序实现SessionHandlerInterface包括本地* SessionHandler的类继承SessionHandler。
代理机制允许您获取更深入参与会话保存处理程序类。代理例如可用于加密任何会话事务没有知识的具体保存处理程序。
请注意
在PHP 5.4之前,你只能代理用户区域但不保存处理程序
原生PHP保存处理程序。