stack / session
会话堆栈中间件。
Requires
- php: >=5.4.0
- pimple/pimple: ~1.0@dev
- symfony/http-foundation: ~2.1
- symfony/http-kernel: ~2.1
Requires (Dev)
- silex/silex: ~1.0@dev
- stack/builder: ~1.0@dev
- stack/callable-http-kernel: ~1.0@dev
- symfony/browser-kit: ~2.1
This package is not auto-updated.
Last update: 2024-07-30 10:27:40 UTC
README
会话堆栈中间件。
启用后续中间件对请求会话的支持。
示例
以下示例展示了如何使用 stack/stack 使 silex 应用程序访问会话:
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\RedirectResponse; $app = new Silex\Application(); $app->get('/login', function (Request $request) { $session = $request->getSession(); $username = $request->server->get('PHP_AUTH_USER'); $password = $request->server->get('PHP_AUTH_PW'); if ('igor' === $username && 'password' === $password) { $session->set('user', array('username' => $username)); return new RedirectResponse('/account'); } return new Response('Please sign in.', 401, [ 'WWW-Authenticate' => sprintf('Basic realm="%s"', 'site_login'), ]); }); $app->get('/account', function (Request $request) { $session = $request->getSession(); if (null === $user = $session->get('user')) { return new RedirectResponse('/login'); } return sprintf('Welcome %s!', $user['username']); }); $stack = (new Stack\Builder()) ->push('Stack\Session'); $app = $stack->resolve($app);
选项
以下选项可以用于配置 stack/session
-
session.storage.save_path (可选): NativeFileSessionHandler 的路径,默认为
sys_get_temp_dir()
的值。 -
session.storage.options (可选): 传递给 session.storage 服务构造函数的选项数组。
对于默认的 NativeSessionStorage,可能的选项列在 PHP 手册的会话配置页面 上。
-
session.default_locale (可选): 默认区域设置,默认为
en
。 -
session.cookie_params (可选): 覆盖会话 cookie 的参数值,如 PHP 手册的 session_get_cookie_params 页面 所述。 (允许的键:
lifetime
,path
,domain
,secure
, 和httponly
)
用法
会话中间件在请求上启用了 Session
对象。您可以通过 Request
对象访问它
$session = $request->getSession(); $session->start(); $foo = $session->get('foo'); $session->set('foo', 'bar');
Silex SessionServiceProvider
请注意,此中间件是 silex SessionServiceProvider 的替代品。如果您想与 silex 一起使用它,您可能需要如下定义 session
服务:
$app['session'] = $app->share(function ($app) { return $app['request']->getSession(); });
如果您的服务依赖于 session
服务,则需要此操作。
灵感
此中间件基于 silex SessionServiceProvider。