-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 22/01/2016 11:38, Remi Collet a écrit :
> Reproducer attached
> 
> It seems that using a user land SessionHandler, the "write" method
> is not called, raising this issue.

Attached as .phpt

Notice: the issue only happens after the:

PHP Warning:  session_start(): Cannot send session cookie - headers
already sent by ...

Remove the "Start" at the beginning and the test pass with 5.6.18RC1

Remi.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iEYEARECAAYFAlaiHWYACgkQYUppBSnxahi1GQCgsaUt2tS20DH9Rd0+AkIwHqIC
ErgAn2dJZ4pR0gWcCABj5EBbRECjGnsu
=QB2l
-----END PGP SIGNATURE-----
--TEST--
Testing repated SessionHandler::open() calls
--SKIPIF--
<?php //include('skipif.inc'); ?>
--FILE--
Start
<?php
class MySessionHandler implements SessionHandlerInterface {
    private $tab;
    private $dbg;
    public function __construct () {
        $this->tab = array();
        $this->dbg = array();
    }    
    public function close () {
        $this->dbg[] = __METHOD__ . "()";
        return true;
    }
    public function destroy ($session_id) {
        $this->dbg[] = __METHOD__ . "('$session_id')";
        unset($this->tab[$session_id]);
        return true;
    }
    public function gc ($maxlifetime) {
        $this->dbg[] = __METHOD__ . "('$maxlifetime')";
        return true;
    }
    public function open ($save_path, $name) {
        $this->dbg[] = __METHOD__ . "('$save_path', '$name')";
        return true;
    }
    public function read($session_id) {
        if (isset($this->tab[$session_id])) {
            $this->dbg[] = __METHOD__ . "('$session_id') => '" . 
$this->tab[$session_id] . "'";
            return $this->tab[$session_id];
            }
        $this->dbg[] = __METHOD__ . "('$session_id') => not found";
        return '';
    }
    public function write ($session_id, $session_data) {
        $this->dbg[] = __METHOD__ . "('$session_id', '$session_data')";
        $this->tab[$session_id] = $session_data;
        return true;
    }
    public function trace() {
        print_r($this->dbg);
    }
}
ini_set('session.save_path', '/tmp');
$handler = new MySessionHandler();
session_set_save_handler($handler, true);

// Write
session_name('sessionname');
session_id('sessionid');
session_start();
$_SESSION['sessiondata'] = 'foo';
session_write_close();

// Reopen
session_name('sessionname');
session_id('sessionid');
session_start();
session_write_close();

$handler->trace();
?>
Done
--EXPECTF--
Start

Warning: session_start(): Cannot send session cookie - headers already sent %s

Warning: session_start(): Cannot send session cache limiter - headers already 
sent %s

Warning: session_start(): Cannot send session cookie - headers already sent %s

Warning: session_start(): Cannot send session cache limiter - headers already 
sent %s
Array
(
    [0] => MySessionHandler::open('/tmp', 'sessionname')
    [1] => MySessionHandler::read('sessionid') => not found
    [2] => MySessionHandler::write('sessionid', 'sessiondata|s:3:"foo";')
    [3] => MySessionHandler::close()
    [4] => MySessionHandler::open('/tmp', 'sessionname')
    [5] => MySessionHandler::read('sessionid') => 'sessiondata|s:3:"foo";'
    [6] => MySessionHandler::write('sessionid', 'sessiondata|s:3:"foo";')
    [7] => MySessionHandler::close()
)
Done
-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to