Abstract the session away in a class
This commit is contained in:
parent
aeff1a4c4d
commit
76d13120ea
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace OC\Session;
|
||||
|
||||
/**
|
||||
* Class Internal
|
||||
*
|
||||
* wrap php's internal session handling into the Session interface
|
||||
*
|
||||
* @package OC\Session
|
||||
*/
|
||||
class Internal extends Memory {
|
||||
public function __construct($name) {
|
||||
session_write_close();
|
||||
session_name($name);
|
||||
if (@session_start()) {
|
||||
throw new \Exception('Failed to start session');
|
||||
}
|
||||
$this->data = $_SESSION;
|
||||
}
|
||||
|
||||
public function __destruct() {
|
||||
$_SESSION = $this->data;
|
||||
session_write_close();
|
||||
}
|
||||
|
||||
public function clear() {
|
||||
session_unset();
|
||||
@session_regenerate_id(true);
|
||||
@session_start();
|
||||
$this->data = $_SESSION = array();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace OC\Session;
|
||||
|
||||
/**
|
||||
* Class Internal
|
||||
*
|
||||
* store session data in an in-memory array, not persistance
|
||||
*
|
||||
* @package OC\Session
|
||||
*/
|
||||
class Memory implements Session {
|
||||
protected $data;
|
||||
|
||||
public function __construct($name) {
|
||||
//no need to use $name since all data is already scoped to this instance
|
||||
$this->data = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function set($key, $value) {
|
||||
$this->data[$key] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return mixed
|
||||
*/
|
||||
public function get($key) {
|
||||
if (!$this->exists($key)) {
|
||||
return null;
|
||||
}
|
||||
return $this->data[$key];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return bool
|
||||
*/
|
||||
public function exists($key) {
|
||||
return isset($this->data[$key]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
*/
|
||||
public function remove($key) {
|
||||
unset($this->data[$key]);
|
||||
}
|
||||
|
||||
public function clear() {
|
||||
$this->data = array();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace OC\Session;
|
||||
|
||||
interface Session {
|
||||
/**
|
||||
* $name serves as a namespace for the session keys
|
||||
*
|
||||
* @param string $name
|
||||
*/
|
||||
public function __construct($name);
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function set($key, $value);
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return mixed should return null if $key does not exist
|
||||
*/
|
||||
public function get($key);
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return bool
|
||||
*/
|
||||
public function exists($key);
|
||||
|
||||
/**
|
||||
* should not throw any errors if $key does not exist
|
||||
*
|
||||
* @param string $key
|
||||
*/
|
||||
public function remove($key);
|
||||
|
||||
/**
|
||||
* removes all entries within the cache namespace
|
||||
*/
|
||||
public function clear();
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace Test\Session;
|
||||
|
||||
class Memory extends Session {
|
||||
public function setUp() {
|
||||
$this->instance = new \OC\Session\Memory(uniqid());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace Test\Session;
|
||||
|
||||
abstract class Session extends \PHPUnit_Framework_TestCase {
|
||||
/**
|
||||
* @var \OC\Session\Session
|
||||
*/
|
||||
protected $instance;
|
||||
|
||||
public function tearDown() {
|
||||
$this->instance->clear();
|
||||
}
|
||||
|
||||
public function testNotExistsEmpty() {
|
||||
$this->assertFalse($this->instance->exists('foo'));
|
||||
}
|
||||
|
||||
public function testExistsAfterSet() {
|
||||
$this->instance->set('foo', 1);
|
||||
$this->assertTrue($this->instance->exists('foo'));
|
||||
}
|
||||
|
||||
public function testNotExistsAfterRemove() {
|
||||
$this->instance->set('foo', 1);
|
||||
$this->instance->remove('foo');
|
||||
$this->assertFalse($this->instance->exists('foo'));
|
||||
}
|
||||
|
||||
public function testGetNonExisting() {
|
||||
$this->assertNull($this->instance->get('foo'));
|
||||
}
|
||||
|
||||
public function testGetAfterSet() {
|
||||
$this->instance->set('foo', 'bar');
|
||||
$this->assertEquals('bar', $this->instance->get(('foo')));
|
||||
}
|
||||
|
||||
public function testRemoveNonExisting() {
|
||||
$this->instance->remove('foo');
|
||||
}
|
||||
|
||||
public function testNotExistsAfterClear() {
|
||||
$this->instance->set('foo', 1);
|
||||
$this->instance->clear();
|
||||
$this->assertFalse($this->instance->exists('foo'));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue