配置会话并保存处理程序

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

配置会话并保存处理程序

本文讨论如何配置会话管理和优化您的特定需求。这个文档包欧宝官网下载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 ()每个类的方法。例如,可以找到一个Memcached所提供的扩展php.net

在本机保存处理程序可以直接激活使用报错(“会话。save_handler’,美元的名字);,Sob娱乐下载ymfony提供了一种方便的方法来激活这些相同的方式为自定义处理程序。

ob娱乐下载Symfony提供了以下司机本地保存处理程序为例:

使用示例:

1 2 3 4 5 6
使用ob娱乐下载\组件\HttpFoundation\会话\会话;使用ob娱乐下载\组件\HttpFoundation\会话\存储\处理程序\NativeFileSessionHandler;使用ob娱乐下载\组件\HttpFoundation\会话\存储\NativeSessionStorage;美元sessionStorage=NativeSessionStorage ([],NativeFileSessionHandler ());美元会话=会话(美元sessionStorage);

请注意

的异常文件处理程序内置PHP和总是可用,其他处理程序的可用性取决于这些PHP扩展思想活跃在运行时。

请注意

本地保存会话存储处理程序提供一个快速解决方案,但是,在你需要更多控制的复杂系统,自定义保存处理程序可能提供更多的自由和灵活性。ob娱乐下载Symfony提供了一些你可能会进一步实现定制的要求。

自定义保存处理程序

自定义处理程序是那些完全取代PHP的内置PHP会话保存处理程序通过提供六回调函数调用内部各点在会话中工作流。

Symfob娱乐下载ony HttpFoundation组件提供了一些在默认情况下,这些可以作为如果你想编写自己的例子。

使用示例:

1 2 3 4 5 6 7
使用ob娱乐下载\组件\HttpFoundation\会话\会话;使用ob娱乐下载\组件\HttpFoundation\会话\存储\处理程序\PdoSessionHandler;使用ob娱乐下载\组件\HttpFoundation\会话\存储\NativeSessionStorage;美元pdo=\ PDO (…);美元sessionStorage=NativeSessionStorage ([],PdoSessionHandler (美元pdo));美元会话=会话(美元sessionStorage);

保存处理程序之间的迁移

如果你的应用程序更改会话存储的方式,使用MigratingSessionHandler新旧之间的迁移不丢失会话数据保存处理程序。

这是推荐的迁移工作流:

  1. 和你的新处理程序切换到迁移处理程序,只写一个。旧的处理程序的行为像往常一样和会话写入新一:

    1
    美元sessionStorage=MigratingSessionHandler (美元oldSessionStorage,美元欧宝平台是合法的吗newSessionStorage);
  2. 您的会话gc周期后,验证新处理程序中的数据是正确的。
  3. 更新迁移处理程序使用旧的处理程序只写一个,因此,会话将会从新的处理程序读取。这个步骤允许简单的回滚:

    1
    美元sessionStorage=MigratingSessionHandler (美元欧宝平台是合法的吗newSessionStorage,美元oldSessionStorage);
  4. 后在您的应用程序正在验证会话,从处理程序迁移到新的处理程序。

配置PHP会话

NativeSessionStorage可以配置的php . ini配置指令的记录php.net/session.configuration

配置这些设置,通过键(省略初始会话。关键的一部分)作为一个键-值的数组选择美元构造函数参数。或者让他们通过setoption ()方法。

为了清晰,一些关键选项解释在这个文档。欧宝官网下载app

出于安全、会话令牌通常建议发送会话cookie。您可以配置会话cookie的一生通过指定生命周期(以秒为单位)使用cookie_lifetime关键在构造函数中选择美元论点NativeSessionStorage

设置一个cookie_lifetime0只会导致饼干生活只要浏览器仍然开放。一般来说,cookie_lifetime将被设置为一个相对大量的几天,几周或几个月。并不少见,饼干一年或更多的取决于应用程序。

因为会话cookie仅仅是一个客户端令牌,他们不太重要的控制你的安全设置的细节最终只能安全地从服务器端控制。

请注意

cookie_lifetime设置cookie应该活的秒数,它不是一个Unix时间戳。由此产生的会话cookie将印有一个失效时间时间()+cookie_lifetime从服务器时间是在那里拍的。

配置垃圾收集

当一个会话打开时,PHP调用gc根据设定的概率随机处理程序session.gc_probability/session.gc_divisorphp . ini。例如,如果这些被设置5/100,它意味着5%的概率。

如果垃圾收集处理程序被调用时,PHP将传递的价值session.gc_maxlifetime,这意味着任何存储会话保存超过gc_maxlifetime秒之前应该被删除。这允许基于空闲时间到期的记录。

然而,一些操作系统(例如Debian)做自己的会话处理和设置session.gc_probability指令0停止PHP进行垃圾收集。这就是为什么现在Symob娱乐下载fony覆盖这个值1

如果你想使用在你设置的初始值php . ini添加以下配置:

  • YAML
  • XML
  • PHP
1 2 3 4
#配置/包/ framework.yaml框架:会话:gc_probability:

通过您可以配置这些设置gc_probability,gc_divisorgc_maxlifetime在构造函数的数组NativeSessionStoragesetoption ()方法。

会话的生命周期

当创建一个新的会话,这意味着Symfony问题一个新的客户端会话cookie,ob娱乐下载 cookie将印有一个失效时间。这是通过添加PHP运行时配置价值计算session.cookie_lifetime与当前服务器时间。

请注意

PHP将只发行一次饼干。预计客户端存储,饼干为整个一生。发布新的饼干只会销毁会话时,浏览器cookie被删除,或会话ID是再生使用迁移()无效()的方法会话类。

最初的饼干一生可以通过配置设置NativeSessionStorage使用setoption ((cookie_lifetime = > 1234))方法。

请注意

一个cookie的一生0意味着饼干到期当浏览器关闭。

会话空闲时间/保持活着

通常情况下,你可能想要保护,或者减少未经授权使用一个会话当用户步骤远离他们的终端同时登录通过破坏一段空闲时间后的会话。例如,它是常见的银行应用程序的登录用户不活动的后5到10分钟。设置cookie的一生中这是不合适的,因为客户机可以操作的,所以我们必须在服务器端做到期。最简单的方法是通过垃圾收集运行实现这个相当频繁。的cookie_lifetime将被设置为一个相对较高的值,和垃圾收集gc_maxlifetime将被设置为破坏会话在任何所需的空闲时间。

另一个选择是专门检查会话开始后的一个会话已经过期。会话可以根据需要被摧毁。这种处理方法允许会话期满可以集成到用户体验,例如,通过显示一条消息。

ob娱乐下载Symfony记录一些关于每个会话的基本元数据在这方面给你完全的自由。

会话缓存限制

为了避免用户看到陈旧的数据,通常为session-enabled资源禁用缓存的头部。为此PHP会话的sessions.cache_limiter选项,这决定了哪些标题(如果有的话)将发送响应当会话的开始。

在建设,NativeSessionStorage集全球选项”“(发送没有头)开发人员希望使用一个响应对象管理响应标头。

谨慎

如果您依赖于PHP会话管理HTTP缓存,你必须手动设置cache_limiter选项NativeSessionStorage一个非空值。

例如,您可以将它设置为PHP的默认值在施工期间:

使用示例:

1 2 3 4
使用ob娱乐下载\组件\HttpFoundation\会话\存储\NativeSessionStorage;美元选项(“cache_limiter”]= session_cache_limiter ();美元sessionStorage=NativeSessionStorage (美元选项);

会话的元数据

会话是装饰着一些基本的元数据,使精细控制的安全设置。会话对象有一个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 ();

饼干的失效时间可以确定通过添加时间戳和一生中创建的。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。