Laravel 4 - 自定义会话处理程序

时间:2013-07-13 07:41:43

标签: php laravel

我希望在Laravel 4中使用我自己的会话处理程序。我可以在哪里扩展Laravel 4会话,这样我就可以使用自己指定的类来读取/写入/删除数据。

2 个答案:

答案 0 :(得分:0)

查看有关扩展Laravel的Laravel文档: http://laravel.com/docs/4.2/extending#session

您希望尽早创建一个新的ServiceProvider以启动新的Session处理程序,并将其置于应用程序配置中的原始SessionServiceProvider引用之下。 实施例

    use Illuminate\Support\ServiceProvider;

class MySessionServiceProvider extends ServiceProvider {

    /**
     * Register my custom service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->registerMySessionHandler();
    }

   /**
     * Register your session manager instance.
     *
     * @return void
     */
    protected function registerMySessionHandler()
    {
        $this->app->bindShared('mysession', function($app)
        {
            return new MySessionHandler($app);
        });
    }

如果您需要更多信息,请查看Illuminate / Session / SessionServiceProvider.php和ServiceProvider文档(http://laravel.com/docs/master/providers)。

编写Session类:

class MySessionHandler implements SessionHandlerInterface {

    public function open($savePath, $sessionName) {}
    public function close() {}
    public function read($sessionId) {}
    public function write($sessionId, $data) {}
    public function destroy($sessionId) {}
    public function gc($lifetime) {}

}

然后你可以使用Session :: extend()方法扩展Session类(我相信这会在你的起始文件中,但不要引用我的话):

Session::extend('mysession', function($app)
{
    return new MySessionHandler;
});

注册会话驱动程序后,您应该在app / config / session.php配置文件中使用mysession驱动程序。

答案 1 :(得分:-1)

首先,在application / libraries文件夹中创建并放置sessionpayload.php并像这样扩展:

class Sessionpayload extends \Laravel\Session\Payload {

//stuff

}

然后,在application / libraries文件夹中创建并放置session.php并像这样扩展:

class Session extends \Laravel\Session {


public static function start($driver)
{
    static::$instance = new Sessionpayload(static::factory($driver));
}

}

然后,您应该在下面注释掉,或者如果您为您的类使用命名空间,则可以更改:

'Session'       => 'Laravel\\Session',

在application / config / application.php。