1

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

4

2 回答 2

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;
});

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

于 2014-11-04T23:14:42.140 回答
-1

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

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 中。

于 2013-07-13T08:01:33.133 回答