Don't call session_start() after ini_set()

refs #3185
This commit is contained in:
Alexander A. Klimov 2018-01-24 17:38:20 +01:00
parent 72ec132f25
commit dadd2c80f6
4 changed files with 54 additions and 2 deletions

View File

@ -29,7 +29,7 @@ class Session
public static function create(BaseSession $session = null) public static function create(BaseSession $session = null)
{ {
if ($session === null) { if ($session === null) {
self::$session = new PhpSession(); self::$session = PhpSession::create();
} else { } else {
self::$session = $session; self::$session = $session;
} }

View File

@ -0,0 +1,37 @@
<?php
/* Icinga Web 2 | (c) 2017 Icinga Development Team | GPLv2+ */
namespace Icinga\Web\Session;
use Icinga\Application\Logger;
use Icinga\Exception\ConfigurationError;
use Icinga\Web\Cookie;
/**
* Session implementation in PHP
*/
class Php72Session extends PhpSession
{
/**
* Open a PHP session
*/
protected function open()
{
session_name($this->sessionName);
$cookie = new Cookie('bogus');
session_set_cookie_params(
0,
$cookie->getPath(),
$cookie->getDomain(),
$cookie->isSecure(),
true
);
session_start(array(
'use_cookies' => true,
'use_only_cookies' => true,
'use_trans_sid' => false
));
}
}

View File

@ -33,6 +33,21 @@ class PhpSession extends Session
*/ */
protected $sessionName = 'Icingaweb2'; protected $sessionName = 'Icingaweb2';
/**
* Create a new PHPSession object using the provided options (if any)
*
* @param array $options An optional array of ini options to set
*
* @return static
*
* @throws ConfigurationError
* @see http://php.net/manual/en/session.configuration.php
*/
public static function create(array $options = null)
{
return version_compare(PHP_VERSION, '7.2.0') < 0 ? new self($options) : new Php72Session($options);
}
/** /**
* Create a new PHPSession object using the provided options (if any) * Create a new PHPSession object using the provided options (if any)
* *

View File

@ -13,7 +13,7 @@ class PhpSessionTest extends BaseTestCase
if (!is_writable('/tmp')) { if (!is_writable('/tmp')) {
$this->markTestSkipped('Could not write to session directory'); $this->markTestSkipped('Could not write to session directory');
} }
return new PhpSession( return PhpSession::create(
array( array(
'use_cookies' => false, 'use_cookies' => false,
'save_path' => '/tmp', 'save_path' => '/tmp',