stack/session

此包已被放弃且不再维护。未建议替代包。

会话堆栈中间件。

dev-master / 1.0.x-dev 2018-01-08 15:42 UTC

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。