silverstripe/hybridsessions

为 SilverStripe 提供 Cookie/DB 会话支持

安装量: 354,546

依赖项: 4

建议者: 0

安全: 1

星标: 16

关注者: 11

分支: 21

开放问题: 5

类型:silverstripe-vendormodule


README

CI Silverstripe supported module

简介

添加一个会话处理程序,在可能的情况下尝试将会话存储在加密的 Cookie 中,如果不行(因为会话太大或已设置头信息),则存储在数据库中。

这允许在多个服务器上使用 Silverstripe 而不必担心会话粘性(只要您解决了其他多服务器问题,如资产存储和数据库)。

限制

  • 仅支持 MySQL 数据库存储。

安装

composer require silverstripe/hybridsessions

设置

  • 使用 /dev/build?flush=all 来设置必要的表
  • 为了初始化会话处理程序,需要将一小段代码添加到您的 _config.php 文件中,以及用于加密用户 Cookie 的私有密钥。

app/src/_config.php

// Ensure that you define a sufficiently indeterminable value for SS_SESSION_KEY in your `.env`
use SilverStripe\Core\Environment;
use SilverStripe\HybridSessions\HybridSession;
HybridSession::init(Environment::getEnv('SS_SESSION_KEY'));

安全

只要密钥是不可预测和保密的,通常这应该和仅服务器端 Cookie 一样安全。唯一的例外是 Cookie 会话容易受到重放攻击。如果您本来就不应该在会话中存储某些内容,这将是一个问题。Ruby on rails 在 https://guides.rubyonrails.net.cn/security.html#replay-attacks-for-cookiestore-sessions 上对这个问题有很好的文档说明。

加密处理程序

此模块附带两个默认的加密处理程序

  • OpenSSLCrypto:使用 OpenSSL 库(默认)。

您也可以通过创建一个实现 SilverStripe\HybridSessions\Crypto\CryptoHandler 接口的类来自定义加密处理程序。

要配置活动处理程序,请向您的项目添加 YAML 配置

---
Name: myappsessionstores
After: sessionstores
---
SilverStripe\HybridSessions\HybridSession:
  SilverStripe\HybridSessions\Crypto\CryptoHandler:
    class: MyCustomCryptoHandler

注意事项

此模块与 testsession 模块不完全兼容,因为数据库存储在建立数据库连接之前不可用,而该连接使用会话来指定数据库连接。小于 1000 字节的数据可能仍然通过 Cookie 存储,但较大的数据集将会丢失。