[HttpFoundation] Always call proxied handler::destroy() in StrictSessionHandler

This commit is contained in:
Nicolas Grekas 2018-01-09 14:54:39 +01:00
parent f95ac4f809
commit e5e2d5ddd2
2 changed files with 16 additions and 2 deletions

View File

@ -19,6 +19,7 @@ namespace Symfony\Component\HttpFoundation\Session\Storage\Handler;
class StrictSessionHandler extends AbstractSessionHandler
{
private $handler;
private $doDestroy;
public function __construct(\SessionHandlerInterface $handler)
{
@ -63,11 +64,24 @@ class StrictSessionHandler extends AbstractSessionHandler
return $this->handler->write($sessionId, $data);
}
/**
* {@inheritdoc}
*/
public function destroy($sessionId)
{
$this->doDestroy = true;
$destroyed = parent::destroy($sessionId);
return $this->doDestroy ? $this->doDestroy($sessionId) : $destroyed;
}
/**
* {@inheritdoc}
*/
protected function doDestroy($sessionId)
{
$this->doDestroy = false;
return $this->handler->destroy($sessionId);
}

View File

@ -118,7 +118,7 @@ class StrictSessionHandlerTest extends TestCase
$handler->expects($this->once())->method('read')
->with('id')->willReturn('');
$handler->expects($this->never())->method('write');
$handler->expects($this->never())->method('destroy');
$handler->expects($this->once())->method('destroy')->willReturn(true);
$proxy = new StrictSessionHandler($handler);
$this->assertFalse($proxy->validateId('id'));
@ -154,7 +154,7 @@ class StrictSessionHandlerTest extends TestCase
$handler = $this->getMockBuilder('SessionHandlerInterface')->getMock();
$handler->expects($this->once())->method('read')
->with('id')->willReturn('');
$handler->expects($this->never())->method('destroy');
$handler->expects($this->once())->method('destroy')->willReturn(true);
$proxy = new StrictSessionHandler($handler);
$this->assertSame('', $proxy->read('id'));