diff --git a/src/Symfony/Component/HttpFoundation/Session/Storage/MemcacheSessionStorage.php b/src/Symfony/Component/HttpFoundation/Session/Storage/MemcacheSessionStorage.php index 3064db3bbb..70be3e913c 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Storage/MemcacheSessionStorage.php +++ b/src/Symfony/Component/HttpFoundation/Session/Storage/MemcacheSessionStorage.php @@ -54,12 +54,14 @@ class MemcacheSessionStorage extends AbstractSessionStorage implements SessionHa // defaults if (!isset($memcacheOptions['serverpool'])) { - $memcacheOptions['serverpool'] = array( + $memcacheOptions['serverpool'] = array(array( 'host' => '127.0.0.1', 'port' => 11211, 'timeout' => 1, 'persistent' => false, - 'weight' => 1); + 'weight' => 1, + 'retry_interval' => 15, + )); } $memcacheOptions['expiretime'] = isset($memcacheOptions['expiretime']) ? (int)$memcacheOptions['expiretime'] : 86400; @@ -72,14 +74,18 @@ class MemcacheSessionStorage extends AbstractSessionStorage implements SessionHa protected function addServer(array $server) { - if (array_key_exists('host', $server)) { + if (!array_key_exists('host', $server)) { throw new \InvalidArgumentException('host key must be set'); } $server['port'] = isset($server['port']) ? (int)$server['port'] : 11211; $server['timeout'] = isset($server['timeout']) ? (int)$server['timeout'] : 1; - $server['presistent'] = isset($server['presistent']) ? (bool)$server['presistent'] : false; - $server['weight'] = isset($server['weight']) ? (bool)$server['weight'] : 1; + $server['persistent'] = isset($server['persistent']) ? (bool)$server['persistent'] : false; + $server['weight'] = isset($server['weight']) ? (int)$server['weight'] : 1; + $server['retry_interval'] = isset($server['retry_interval']) ? (int)$server['retry_interval'] : 15; + + $this->memcache->addserver($server['host'], $server['port'], $server['persistent'],$server['weight'],$server['timeout'],$server['retry_interval']); + } /** @@ -88,7 +94,7 @@ class MemcacheSessionStorage extends AbstractSessionStorage implements SessionHa public function open($savePath, $sessionName) { foreach ($this->memcacheOptions['serverpool'] as $server) { - $this->memcache->addServer($server); + $this->addServer($server); } return true; @@ -115,7 +121,7 @@ class MemcacheSessionStorage extends AbstractSessionStorage implements SessionHa */ public function write($sessionId, $data) { - return $this->memcache->set($this->prefix.$sessionId, $data, $this->memcacheOptions['expiretime']); + return $this->memcache->set($this->prefix.$sessionId, $data, 0, $this->memcacheOptions['expiretime']); } /** diff --git a/tests/Symfony/Tests/Component/HttpFoundation/Session/Storage/MemcacheSessionStorageTest.php b/tests/Symfony/Tests/Component/HttpFoundation/Session/Storage/MemcacheSessionStorageTest.php index a8327e0f9c..1cdbe2a3a9 100644 --- a/tests/Symfony/Tests/Component/HttpFoundation/Session/Storage/MemcacheSessionStorageTest.php +++ b/tests/Symfony/Tests/Component/HttpFoundation/Session/Storage/MemcacheSessionStorageTest.php @@ -32,11 +32,48 @@ class MemcacheSessionStorageTest extends \PHPUnit_Framework_TestCase public function testOpenSession() { $this->memcache->expects($this->atLeastOnce()) - ->method('addServer'); + ->method('addServer') + ->with('127.0.0.1', 11211, false, 1, 1, 15); $this->assertTrue($this->storage->open('', '')); } + public function testConstructingWithServerPool() + { + $mock = $this->getMock('Memcache'); + + $storage = new MemcacheSessionStorage($mock, array( + 'serverpool' => array( + array('host' => '127.0.0.2'), + array('host' => '127.0.0.3', + 'port' => 11212, + 'timeout' => 10, + 'persistent' => true, + 'weight' => 5, + 'retry_interval' => 39, + ), + array('host' => '127.0.0.4', + 'port' => 11211, + 'weight' => 2 + ), + ), + )); + + $matcher = $mock + ->expects($this->at(0)) + ->method('addServer') + ->with('127.0.0.2', 11211, false, 1, 1, 15); + $matcher = $mock + ->expects($this->at(1)) + ->method('addServer') + ->with('127.0.0.3', 11212, true, 5, 10, 39); + $matcher = $mock + ->expects($this->at(2)) + ->method('addServer') + ->with('127.0.0.4', 11211, false, 2, 1, 15); + $this->assertTrue($storage->open('', '')); + } + public function testCloseSession() { $this->memcache->expects($this->once())