bolt/会话

Symfony HTTP层使用的PHP会话存储

v1.1.1 2018-02-25 09:49 UTC

This package is auto-updated.

Last update: 2024-08-29 04:14:41 UTC


README

基于Symfony组件构建的PHP会话处理程序,支持Silex v1 & v2。

支持以下会话存储:

  • Doctrine缓存
  • Symfony文件系统
  • Bolt文件系统
  • Memcache
  • Memcached
  • PSR-6缓存
  • PSR-16简单缓存
  • Redis

服务提供者

Silex 1

use Bolt\Session\Bridge\Silex1\SessionServiceProvider;
use Silex\Application;


$app = new Applicaiton();
$app->register(new SessionServiceProvider());

Silex 2

use Bolt\Session\Bridge\Silex2\SessionServiceProvider;
use Silex\Application;

$app = new Applicaiton();
$app->register(new SessionServiceProvider());

浏览器cookie

默认情况下,如果没有设置覆盖选项,Bolt将继承设置cookies_lifetimecookies_domainenforce_ssl(用于cookie_secure),按照介绍中解释的优先级顺序。

但是,如果您需要更精细的控制,还有几个覆盖设置可供选择。

有效期

cookie有效的时间(秒)。将此值设置为0表示“直到浏览器关闭”。

.php.ini中,此设置是session.cookie_lifetime

基本URI路径

指定要设置在会话cookie中的URI路径。

.php.ini中,此设置是session.cookie_path

覆盖域名

指定要设置在会话cookie中的域名。默认值为null,表示创建cookie的服务器的名称。

.php.ini中,此设置是session.cookie_domain

强制HTTPS请求

将此设置为true将强制HTTPS连接要求来设置和使用会话cookie。

.php.ini中,此设置是session.cookie_secure

限制对HTTP协议的请求

将cookie标记为仅可通过HTTP协议访问,阻止通过JavaScript等访问请求。

此设置可以有效地帮助减少通过XSS攻击进行身份盗窃,尽管浏览器的支持可能不同。

在您的config.yml中设置

.php.ini中,此设置是session.cookie_httponly

会话ID生成

会话ID是随机生成的,以唯一标识用户的会话。Bolt内部以类似于PHP 7.1+现在的方式处理此生成,以确保生成ID的唯一性。

默认情况下,PHP和Bolt都使用32位的ID长度,这应该提供了极小的碰撞或可预测性。

在具有一致可用CPU资源的宿主上,并关注安全的情况下,您应该考虑48或更大的数字。但是,这将增加服务器负载,并增加生成会话ID所需的时间。

在PHP 7.0和Intel i5-5200上生成1,000个会话ID的示例

支持的最高值是256。

在PHP 7.1+中,在.php.ini中此设置是session.sid_length

会话存储处理程序

会话存储处理默认情况下是我们的文件系统层。然而,我们也支持Redis和Memcached以用于更高级的使用场景。

在您的config.yml中设置

.php.ini中,此设置是session.save_handler

注意:一些网络托管提供商可能实现与Bolt会话不兼容的替代会话处理。

如果您遇到来自SessionServiceProvider的异常,表明PHP的系统保存路径存在问题,请设置save_handler: filesystem,以及以下显示的save_path选项。

使用Redis处理器

当使用Redis作为处理器时,以下选项也在会话选项的connections子键下。

如果本地\Redis库可用,它将被用作Redis的处理程序;如果不可用,它将检查PHP本地库的实现,即\Predis\Client,并使用它。

使用Memcached处理器

当使用Memcached作为处理器时,以下选项也在会话选项的connections子键下。

保存的会话文件路径

会话数据在请求之间缓存,并且**不会**被正常的缓存清除功能清除。

相反,它使用垃圾收集来管理过期会话的删除。有关配置的详细信息,请参阅下面的垃圾收集部分。

注意:在实时服务器上手动删除会话数据**绝对不推荐**。如果需要在实时服务器上这样做,请确保所有用户都已注销,并将网站置于维护模式。

.php.ini中,此设置是session.save_path

使用文件系统处理器

当使用默认的文件系统处理器时,save_path参数需要以下形式:{mount point}://{path}

有关Bolt中可用挂载点的详细信息,请参阅Bolt的文件系统概述页面。

警告:如果您将其设置为可由世界读取的目录,例如/tmp,服务器上的其他用户可能能够劫持会话或提取可能敏感的数据。

使用Redis处理器

当使用Redis作为处理器时,save_path应定义为tcp://IPADDRESS:PORT的格式,默认为tcp://127.0.0.1:6379

使用Memcached处理器

当使用Memcached作为处理器时,save_path应定义为IPADDRESS:PORT的格式,默认为127.0.0.1:11211

垃圾收集

会话垃圾收集是删除超过配置的最大生命周期的旧会话。

是否执行垃圾收集的必要性是基于每个会话初始化期间的随机概率计算确定的。

最大生命周期

最大生命周期设置指定了秒数,在此之后会话数据将被视为“垃圾”并可能被清理。

.php.ini中,此设置是session.gc_maxlifetime

概率 & 除数

设置gc_divisorgc_probability一起定义了执行垃圾收集(GC)过程的概率。

在Bolt的会话存储处理器中,概率是通过生成介于0和gc_divisor之间的随机数来计算的。如果gc_probability的值大于随机数,则将执行垃圾收集,并删除超过最大配置生命周期的会话文件。

注意:要禁用垃圾收集,请将gc_probability设置为-1

.php.ini中,这些设置是