ray/symfony-session-module

Ray.Di 的 Symfony 会话模块

1.1.0 2016-07-08 12:33 UTC

This package is not auto-updated.

Last update: 2024-09-12 02:22:52 UTC


README

Scrutinizer Code Quality Code Coverage Build Status Packagist Packagist

Symfony 会话Ray.Di 提供的模块

安装

Composer 安装

$ composer require ray/symfony-session-module

模块安装

PdoSessionModule(例如,用于 MySQL)

  1. 在您的数据库中创建 sessions 表。

    $ ./vendor/ray/symfony-session-module/bin/initPdoSession 'mysql:host=localhost;dbname=mydb' 'myname' 'mypass'
  2. 安装模块。

    use Ray\Di\AbstractModule;
    use Ray\SymfonySessionModule\PdoSessionModule;
    
    class AppModule extends AbstractModule
    {
        protected function configure()
        {
            $pdo = new \PDO('mysql:host=localhost;dbname=mydb', 'myname', 'mypass');
            $options = [
                'cookie_secure' => 1,
                'cookie_httponly' => 1,
                'cookie_lifetime' => 60 * 60 * 24
            ];
    
            $this->install(new PdoSessionModule($pdo, $options));
        }
    }

DI 特性

  • SessionInject 用于 Symfony\Component\HttpFoundation\Session\SessionInterface 接口

会话生命周期管理

对于每个请求,您的应用程序可以检查会话cookie是否已过期。如果会话cookie已过期,则抛出 SessionExpiredException

配置

  1. 安装 SessionalModule

    use Ray\Di\AbstractModule;
    use Ray\SymfonySessionModule\PdoSessionModule;
    use Ray\SymfonySessionModule\SessionalModule;
    
    class AppModule extends AbstractModule
    {
        protected function configure()
        {
            $this->install(new PdoSessionModule($pdo, $options));
            $this->install(new SessionalModule); // <--
        }
    }
  2. 使用 @Sessional 注解标记类或方法。

    当标记为 @Sessional 的类中的任何方法执行时,会话将自动启动并检查会话cookie。

    use Ray\SymfonySessionModule\Annotation\Sessional;
    
    /**
     * @Sessional
     */
    class SomeController
    {
        public function fooAction()
        {
            // session is automatically started and session cookie is checked.
        }
    }

    当标记为 @Sessional 的方法执行时,会话将自动启动并检查会话cookie。

    use Ray\SymfonySessionModule\Annotation\Sessional;
    
    class SomeController
    {
        /**
         * @Sessional
         */
        public function fooAction()
        {
            // session is automatically started and session cookie is checked.
        }
    
        public function barAction()
        {
            // session is NOT started.
        }
    }

单元测试

MockSessionModule 提供了用于单元测试的 内存 会话机制。任何会话数据都不会持久化到存储。

use Ray\Di\AbstractModule;
use Ray\SymfonySessionModule\MockSessionModule;
use Ray\SymfonySessionModule\SessionalModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new MockSessionModule); // <--
        $this->install(new SessionalModule);
    }
}

演示

$ php docs/demo/run.php
// Session is started!

要求

  • PHP 5.6+
  • hhvm

更多文档