pollen-solutions / session
Pollen Solutions - 会话组件 - 通过HTTP请求存储和查询用户会话信息。
v1.0.0
2021-08-13 00:00 UTC
Requires
- php: ^7.4 || ^8.0
- pollen-solutions/support: ^1.0
- symfony/security-csrf: ^5.2
Requires (Dev)
- phpunit/phpunit: ^9.0
- roave/security-advisories: dev-latest
Suggests
- pollen-solutions/container: Pollen Solutions - Container Component - PSR-11 ready Dependencies Injection Container.
This package is auto-updated.
Last update: 2024-09-13 14:59:04 UTC
README
Pollen Solutions Session 组件提供了通过HTTP请求用户会话存储和查询信息的实用工具。
安装
composer require pollen-solutions/session
基本用法
use Pollen\Session\SessionManager; $session = new SessionManager(); try { $session->start(); } catch (RuntimeException $e) { unset($e); } $session->set('key1', 'value1'); $session->set('key2', 'value2'); var_dump($session->all());
基础通用API
use Pollen\Session\SessionManager; $session = new SessionManager(); // Start session (with exception catching for best practice). try { $session->start(); } catch (RuntimeException $e) { // throwing error. throw $e; // or mute the error. // unset($e); } // Sets data. $session->set('key1', 'value1'); $session->set('key2', 'value2'); // Checks if data key exists. $session->has('key1'); // Gets data value. $session->get('key1', 'defaultValue'); // Returns all data values. $session->all(); // Counts datas. $session->count(); // Deletes a data by its key. $session->remove('key1'); // Clear all existing datas. $session->clear();
基础闪存API
一种简单的方式在HTTP请求中设置闪存消息,并在页面重定向后显示它们。
use Pollen\Session\SessionManager; $session = new SessionManager(); try { $session->start(); } catch (RuntimeException $e) { unset($e); } // Retrieve the flashBag instance. $session->flash(); // Sets a flash data. $session->flash()->set('key1', 'value1'); $session->flash()->set('key2', 'value2'); // Alternative method to set flash data. $session->flash([ 'key1' => 'value1', 'key2' => 'value2' ]); // Checks if flash data exists by its key. $session->flash()->has('key1'); // Gets a flash data value without removing it. $session->flash()->peek('key1'); // Gets a flash data value with a fallback value and without removing it. $session->flash()->read('key1', 'defaultValue1'); // Gets all flash data values. $session->flash()->peekAll(); // Alternative method to gets all flash data values $session->flash()->readAll(); // Gets a flash data value and removing it. $session->flash()->get('key1'); // Gets a flash data value with a fallback value and removing it. $session->flash('key1', 'defaultValue'); // Gets all flash data value and removing them. $session->flash()->all(); // Counts flash datas. $session->flash()->count(); // Removes a flash data by its key. $session->flash()->remove('key1'); // Clear all flash datas. $session->flash()->clear();
CSRF保护
会话提供了一种防止CSRF攻击的保护系统。
设置令牌ID
理想情况下,使用至少32个字符的字符串。
use Pollen\Session\SessionManager; $session = new SessionManager(); $session->setTokenID('example_token_id');
基本令牌验证过程
use Pollen\Session\SessionManager; $session = new SessionManager(); $session->setTokenID('example_token_id'); $token = $session->getToken(); var_dump($session->verifyToken($token));
自定义令牌验证过程
use Pollen\Session\SessionManager; $session = new SessionManager(); $token = $session->getToken('custom_token_id'); var_dump($session->verifyToken($token, 'custom_token_id'));
表单工作流程
- 创建CSRF令牌。
use Pollen\Session\SessionManager; $session = new SessionManager(); $csrf_token = $session->getToken();
- 提交带有CSRF令牌的表单。
<form method="post"> <input type="hidden" name="token" value="{{ csrf_token }}"> <button type="submit">Submit</button> </form>
- 捕获和验证CSRF令牌提交。
use Pollen\Session\SessionManager; use Pollen\Http\Request; $session = new SessionManager(); $request = Request::createFromGlobals(); $token = $request->request->get('token'); var_dump($session->verifyToken($token));
高级用法
通过HTTP请求访问会话
use Pollen\Session\SessionManager; use Pollen\Http\Request; $session = new SessionManager(); try { $session->start(); } catch (RuntimeException $e) { unset($e); } $session->set('key1', 'value1'); $session->set('key2', 'value2'); $request = Request::createFromGlobals(); $request->setSession($session->processor()); var_dump($request->getSession()->all());
属性键包
use Pollen\Session\SessionManager; $session = new SessionManager(); try { $session->start(); } catch (RuntimeException $e) { unset($e); } // Registers an attribute key bag. $keyBag = $session->addAttributeKeyBag('specialKey'); // Sets data for key $keyBag->set('test1', 'value1'); $keyBag->set('test2', 'value2'); // Alternate dot syntax allowed $keyBag->set('test3.childs', ['child1', 'child2', 'child3']); // Get data var_dump($keyBag->all()); var_dump($session->get('specialKey'));