metarush / cookie-sessions
使用加密cookie作为会话处理程序的零存储会话
v3.1.0
2022-06-04 21:49 UTC
Requires
- php: >=8.1
- defuse/php-encryption: ^2.2
Requires (Dev)
- phpstan/phpstan: 1.7.*
README
使用加密cookie作为会话处理程序的零存储会话
此库是传统会话存储(如文件系统、数据库、内存等)的替代品。使用此库可以利用浏览器cookie作为会话存储,并在无需维护传统会话存储的情况下实现可扩展性。
安装
通过composer安装为metarush/cookie-sessions
用法
-
在终端中输入
vendor/bin/generate-defuse-key
生成加密密钥。 -
定义cookie选项(请参考\setcookie()函数的
options
参数)。
<?php $options = [ 'path' => '/', 'secure' => true, 'httponly' => true ];
注意:不要设置expires
选项,此库将使用session.gc_maxlifetime
ini指令。
- 在您的脚本顶部设置自定义会话处理程序。
$secretKey = 'replace this with the generated key'; $cookiePrefix = 'your_identifier'; // optional cookie prefix, keep it short, alphanumeric with _ suffix (e.g., XYZ_) $handler = new \MetaRush\CookieSessions\Handler($secretKey, $options, $cookiePrefix); session_set_save_handler($handler, true); session_start();
- 正常使用
$_SESSIONS
。
$_SESSIONS['foo'] = 'bar';
注意
- 此库使用
defuse/php-encryption
加密cookie中的会话数据。 - 将
$secretKey
隐藏起来,不要公开。 - 浏览器通常对每个域名有4,000字节的cookie总限制。
- 如果您尝试设置一个等于≥4,000字节的会话变量(加密形式),将会抛出E_USER_WARNING。
- 此限制计算的是加密形式的数据,相当于大约1,900个未加密的数据。
- 此限制不包括已写入的其他会话数据或同一域名上使用cookie的脚本。
- 尽可能减少每个域名上的会话/cookie变量,以便为其他脚本腾出空间(如果适用)。