mirror of
https://github.com/silverstripe/silverstripe-testsession
synced 2024-10-22 14:06:00 +02:00
Merge pull request #10 from silverstripe-labs/pulls/php-session-state
Allow setting PHP session state
This commit is contained in:
commit
adc3ac5c38
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
*IMPORTANT: This module is intended for development and testing, it poses a security risk if used on production servers.*
|
||||||
|
*It's completely possible to allow any user to become an admin, or do other nefarious things, if this is installed on a live site*
|
||||||
|
|
||||||
This module starts a testing session in a browser,
|
This module starts a testing session in a browser,
|
||||||
in order to test a SilverStripe application in a clean state.
|
in order to test a SilverStripe application in a clean state.
|
||||||
Usually the session is started on a fresh database with only default records loaded.
|
Usually the session is started on a fresh database with only default records loaded.
|
||||||
@ -39,6 +42,8 @@ Commands:
|
|||||||
* `dev/testsession/end`: Removes the test state, and resets to the original database.
|
* `dev/testsession/end`: Removes the test state, and resets to the original database.
|
||||||
* `dev/testsession/loadfixture?fixture=<path>`: Loads a fixture into an existing test state.
|
* `dev/testsession/loadfixture?fixture=<path>`: Loads a fixture into an existing test state.
|
||||||
* `dev/testsession/clear`: Empties the test state.
|
* `dev/testsession/clear`: Empties the test state.
|
||||||
|
* `dev/testsession/browsersessionstate`: Set or unset browser session state (different from test session state).
|
||||||
|
Use query parameters to define states.
|
||||||
|
|
||||||
While you can use the interface to set the test session state,
|
While you can use the interface to set the test session state,
|
||||||
it can be useful to set them programmatically through query parameters
|
it can be useful to set them programmatically through query parameters
|
||||||
|
@ -10,6 +10,7 @@ class TestSessionController extends Controller {
|
|||||||
'set',
|
'set',
|
||||||
'end',
|
'end',
|
||||||
'clear',
|
'clear',
|
||||||
|
'browsersessionstate',
|
||||||
'StartForm',
|
'StartForm',
|
||||||
'ProgressForm',
|
'ProgressForm',
|
||||||
);
|
);
|
||||||
@ -87,6 +88,29 @@ class TestSessionController extends Controller {
|
|||||||
return $this->renderWith('TestSession_inprogress');
|
return $this->renderWith('TestSession_inprogress');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set $_SESSION state for the current browser session.
|
||||||
|
*/
|
||||||
|
public function browsersessionstate($request) {
|
||||||
|
if(!$this->environment->isRunningTests()) {
|
||||||
|
throw new LogicException("No test session in progress.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$newSessionStates = array_diff_key($request->getVars(), array('url' => true));
|
||||||
|
if(!$newSessionStates) {
|
||||||
|
throw new LogicException('No query parameters detected');
|
||||||
|
}
|
||||||
|
|
||||||
|
$sessionStates = (array)Session::get('_TestSessionController.BrowserSessionState');
|
||||||
|
|
||||||
|
foreach($newSessionStates as $k => $v) {
|
||||||
|
Session::set($k, $v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Track which state we're setting so we can unset later in end()
|
||||||
|
Session::set('_TestSessionController.BrowserSessionState', array_merge($sessionStates, $newSessionStates));
|
||||||
|
}
|
||||||
|
|
||||||
public function StartForm() {
|
public function StartForm() {
|
||||||
$databaseTemplates = $this->getDatabaseTemplates();
|
$databaseTemplates = $this->getDatabaseTemplates();
|
||||||
$fields = new FieldList(
|
$fields = new FieldList(
|
||||||
@ -232,6 +256,15 @@ class TestSessionController extends Controller {
|
|||||||
|
|
||||||
$this->environment->endTestSession();
|
$this->environment->endTestSession();
|
||||||
|
|
||||||
|
// Clear out all PHP session states which have been set previously
|
||||||
|
if($sessionStates = Session::get('_TestSessionController.BrowserSessionState')) {
|
||||||
|
foreach($sessionStates as $k => $v) {
|
||||||
|
Session::clear($k);
|
||||||
|
}
|
||||||
|
Session::clear('_TestSessionController');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return $this->renderWith('TestSession_end');
|
return $this->renderWith('TestSession_end');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user