Skip to content

Commit c8d7760

Browse files
committed
Session: default values for cookie_path, cookie_domain & cookie_secure are taken from Response
1 parent a54e4f8 commit c8d7760

3 files changed

Lines changed: 47 additions & 9 deletions

File tree

src/Http/Session.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ class Session
3838

3939
// cookies
4040
'cookie_lifetime' => 0, // until the browser is closed
41-
'cookie_path' => '/', // cookie is available within the entire domain
42-
'cookie_domain' => '', // cookie is available on current subdomain only
43-
'cookie_secure' => false, // cookie is available on HTTP & HTTPS
4441
'cookie_httponly' => true, // must be enabled to prevent Session Hijacking
4542

4643
// other
@@ -62,6 +59,9 @@ public function __construct(IRequest $request, IResponse $response)
6259
$this->request = $request;
6360
$this->response = $response;
6461
self::$started = self::$started && session_status() === PHP_SESSION_ACTIVE;
62+
$this->options['cookie_path'] = & $this->response->cookiePath;
63+
$this->options['cookie_domain'] = & $this->response->cookieDomain;
64+
$this->options['cookie_secure'] = & $this->response->cookieSecure;
6565
}
6666

6767

tests/Http/Session.cookies.phpt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Tester\Assert;
6+
7+
8+
require __DIR__ . '/../bootstrap.php';
9+
10+
11+
$factory = new Nette\Http\RequestFactory;
12+
$response = new Nette\Http\Response;
13+
$session = new Nette\Http\Session($factory->createHttpRequest(), $response);
14+
15+
$session->setOptions([]);
16+
17+
$response->cookiePath = '/user/';
18+
$response->cookieDomain = 'nette.org';
19+
$response->cookieSecure = true;
20+
21+
Assert::same([
22+
'referer_check' => '',
23+
'use_cookies' => 1,
24+
'use_only_cookies' => 1,
25+
'use_trans_sid' => 0,
26+
'cookie_lifetime' => 0,
27+
'cookie_httponly' => true,
28+
'gc_maxlifetime' => 10800,
29+
'cookie_path' => '/user/',
30+
'cookie_domain' => 'nette.org',
31+
'cookie_secure' => true,
32+
], $session->getOptions());
33+
34+
$session->setOptions([
35+
'cookie_domain' => '.domain.com',
36+
]);
37+
38+
Assert::same('nette.org', $response->cookieDomain);

tests/Http/Session.setOptions.phpt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ Assert::same([
2121
'use_only_cookies' => 1,
2222
'use_trans_sid' => 0,
2323
'cookie_lifetime' => 0,
24+
'cookie_httponly' => true,
25+
'gc_maxlifetime' => 10800,
2426
'cookie_path' => '/',
2527
'cookie_domain' => '',
2628
'cookie_secure' => false,
27-
'cookie_httponly' => true,
28-
'gc_maxlifetime' => 10800,
2929
], $session->getOptions());
3030

3131
$session->setOptions([
@@ -38,10 +38,10 @@ Assert::same([
3838
'use_only_cookies' => 1,
3939
'use_trans_sid' => 0,
4040
'cookie_lifetime' => 0,
41-
'cookie_path' => '/',
42-
'cookie_secure' => false,
4341
'cookie_httponly' => true,
4442
'gc_maxlifetime' => 10800,
43+
'cookie_path' => '/',
44+
'cookie_secure' => false,
4545
], $session->getOptions());
4646

4747
$session->setOptions([
@@ -54,8 +54,8 @@ Assert::same([
5454
'use_only_cookies' => 1,
5555
'use_trans_sid' => 0,
5656
'cookie_lifetime' => 0,
57-
'cookie_path' => '/',
58-
'cookie_secure' => false,
5957
'cookie_httponly' => true,
6058
'gc_maxlifetime' => 10800,
59+
'cookie_path' => '/',
60+
'cookie_secure' => false,
6161
], $session->getOptions());

0 commit comments

Comments
 (0)