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


Laravel 4 - Custom Session Handler

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

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

您需要创建一个新的ServiceProvider来尽早启动新的会话处理程序,并将其放置在应用程序配置中的原始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)如果你需要更多信息。

编写您的会话类:

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驱动程序。

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

class Sessionpayload extends 'Laravel'Session'Payload {
//stuff
}

然后,创建session.php并将其放置在application/libraries文件夹中,然后进行如下扩展:

class Session extends 'Laravel'Session {

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

然后,您应该在下面一行注释,或者如果您使用类的名称空间,您可以进行更改:

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

在application/config/application.php中。