bolt / 会话
Symfony HTTP层使用的PHP会话存储
Requires
- php: ^5.5 || ^7.0
- bolt/common: ^1.0
- symfony/event-dispatcher: ^2.8 || ^3.0 || ^4.0
- symfony/http-foundation: ^2.8 || ^3.0 || ^4.0
- symfony/http-kernel: ^2.8 || ^3.0 || ^4.0
- symfony/polyfill-php70: ^1.0
Requires (Dev)
- bolt/codingstyle: ^2.0@dev
- bolt/filesystem: ^2.0
- escapestudios/symfony2-coding-standard: ^3.1
- friendsofphp/php-cs-fixer: ^2.10
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: ^4.8 || ^5.7 || ^6.0
- predis/predis: ^1.1
- silex/silex: ^1.3 || ^2.0
- squizlabs/php_codesniffer: ^3.0
- symfony/cache: ^3.3 || ^4.0
- symfony/filesystem: ^2.8 || ^3.0 || ^4.0
- symfony/phpunit-bridge: ^3.3 || ^4.0
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_lifetime
、cookies_domain
和enforce_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_divisor
与gc_probability
一起定义了执行垃圾收集(GC)过程的概率。
在Bolt的会话存储处理器中,概率是通过生成介于0和gc_divisor
之间的随机数来计算的。如果gc_probability
的值大于随机数,则将执行垃圾收集,并删除超过最大配置生命周期的会话文件。
注意:要禁用垃圾收集,请将gc_probability
设置为-1
。
在.php.ini
中,这些设置是