Skip to content

Commit 23397f9

Browse files
authored
Merge pull request #128 from codemix/127-optional-session
Make use of session optional
2 parents 645d62a + c70ea3a commit 23397f9

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ php:
55
install:
66
- sudo apt-get update
77
- travis_retry composer self-update && composer --version
8-
- travis_retry composer global require --no-progress "fxp/composer-asset-plugin:^1.4.1"
98
- travis_retry composer clear-cache
109
- export PATH="$HOME/.composer/vendor/bin:$PATH"
1110
- travis_retry composer install --prefer-dist --no-interaction --no-progress

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ You can modify other persistence settings with:
220220
* `languageCookieName`: The name of the language cookie. Default is `_language`.
221221
* `languageCookieOptions`: Other options to set on the language cookie.
222222
* `languageSessionKey`: The name of the language session key. Default is `_language`.
223+
Since 1.6.0 this can also be set to `false` to not use the session at all.
223224

224225
#### Reset To Default Language
225226

UrlManager.php

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ class UrlManager extends BaseUrlManager
7272
public $keepUppercaseLanguageCode = false;
7373

7474
/**
75-
* @var string the name of the session key that is used to store the
76-
* language. Default is '_language'.
75+
* @var string|bool the name of the session key that is used to store the
76+
* language. If `false` no session is used. Default is '_language'.
7777
*/
7878
public $languageSessionKey = '_language';
7979

@@ -418,8 +418,10 @@ protected function persistLanguage($language)
418418
]));
419419
}
420420
}
421-
Yii::$app->session[$this->languageSessionKey] = $language;
422-
Yii::trace("Persisting language '$language' in session.", __METHOD__);
421+
if ($this->languageSessionKey !== false) {
422+
Yii::$app->session[$this->languageSessionKey] = $language;
423+
Yii::trace("Persisting language '$language' in session.", __METHOD__);
424+
}
423425
if ($this->languageCookieDuration) {
424426
$cookie = new Cookie(array_merge(
425427
['httpOnly' => true],
@@ -440,8 +442,11 @@ protected function persistLanguage($language)
440442
*/
441443
protected function loadPersistedLanguage()
442444
{
443-
$language = Yii::$app->session->get($this->languageSessionKey);
444-
$language!==null && Yii::trace("Found persisted language '$language' in session.", __METHOD__);
445+
$language = null;
446+
if ($this->languageSessionKey !== false) {
447+
$language = Yii::$app->session->get($this->languageSessionKey);
448+
$language!==null && Yii::trace("Found persisted language '$language' in session.", __METHOD__);
449+
}
445450
if ($language===null) {
446451
$language = $this->_request->getCookies()->getValue($this->languageCookieName);
447452
$language!==null && Yii::trace("Found persisted language '$language' in cookie.", __METHOD__);

tests/UrlManagerTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,4 +248,18 @@ public function testCanDisableCookieOnly()
248248
$request = Yii::$app->request;
249249
$this->assertEquals('site/page', $request->pathInfo);
250250
}
251+
252+
public function testCanDisableSessionOnly()
253+
{
254+
$this->mockUrlManager([
255+
'languages' => ['en-US', 'en', 'de'],
256+
'languageSessionKey' => false,
257+
]);
258+
$this->mockRequest('/en-us/site/page');
259+
$this->assertEquals('en-US', Yii::$app->language);
260+
$this->assertNull(Yii::$app->session->get('_language'));
261+
$this->assertEquals('en-US', Yii::$app->response->cookies->get('_language'));
262+
$request = Yii::$app->request;
263+
$this->assertEquals('site/page', $request->pathInfo);
264+
}
251265
}

0 commit comments

Comments
 (0)