我希望在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中。