mintellity / laravel-tabbed-session
每个浏览器标签页拥有独立的会话。
Requires
- php: ^8.3 || ^8.2 || ^8.1
- illuminate/contracts: ^11.0 || ^10.0 || ^9.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
README
使用此包,您可以为每个浏览器标签页创建一个独立的会话。例如,如果您希望每个标签页有不同的租户,这将非常有用。此包利用查询参数来标识标签页,并在默认会话中的数组中存储所有数据。
安装
您可以通过composer安装此包
composer require mintellity/laravel-tabbed-session
将中间件添加到您的 app/Http/Kernel.php
文件中。请注意,中间件必须添加在 StartSession
中间件之后,并且必须添加在所有其他应使用标签页会话的中间件之前
protected $middleware = [ // ... \Mintellity\LaravelTabbedSession\Http\Middleware\TabbedSessionMiddleware::class, ];
将JS脚本添加到例如您的 resources/js/app.js
文件中
require('../../vendor/mintellity/laravel-tabbed-session/resources/js/tabbedSession');
默认查询参数名称为 tabId
。您可以通过编辑环境文件并添加以下行来更改此名称。请注意,参数名称必须是唯一的,并且不与路由中的其他参数冲突。如果您更改参数名称,也必须在JS脚本中更改名称
BROWSER_TAB_URL_PARAMETER_NAME=browserTabId
require('../../vendor/mintellity/laravel-tabbed-session/resources/js/tabbedSession')('browserTabId');
用法
要访问标签页会话,您可以使用 browsserTab()->session()
辅助函数
browserTab()->session()->put('foo', 'bar'); browserTab()->session()->get('foo'); // bar
禁用某些路径
您可以为特定路径完全禁用TabbedSession。将路径包含在配置中的 $exclude
中。也可以使用正则表达式匹配路径
return [ 'exclude' => [ 'admin/*', // Will disable middleware for all paths matching this pattern, e.g. admin/user/create ] ]
请注意:如果在使用禁用路径时使用 browserTab()
辅助函数,它将抛出异常。
前端 "会话"
这是一个可选功能,允许您在cookie中为每个标签页存储一些数据。cookie也可以从前端访问。
⚠️ 这不是存储数据的安全方式! 数据未加密,并且可以被用户篡改。仅用于非安全相关的数据。
安装
将cookie添加到 App\Http\Middleware\EncryptCookies
中未加密cookie的列表中
$this->disableFor(config('tabbed-session.frontend-cookie-name'));
可以通过编辑环境文件并添加以下行来更改cookie名称
FRONTEND_TAB_SESSION_COOKIE_NAME=frontend_tab_session
并将脚本添加到您的 resources/js/app.js
文件中
require('../../vendor/mintellity/laravel-tabbed-session/resources/js/frontendTabSession')('frontend_tab_session');
用法
在前端使用JS
window.tabSessionStorage.set('foo', 'bar'); window.tabSessionStorage.get('foo'); // bar
从后端
browserTab()->frontendSession()->set('foo', 'bar'); browserTab()->frontendSession()->get('foo'); // bar
变更日志
请参阅 CHANGELOG 了解最近的变化信息。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅 许可证文件。