Re: Cannot make use_strict_mode work with custom session handler upon'files'

From: Date: Sat, 25 Mar 2017 06:19:54 +0000
Subject: Re: Cannot make use_strict_mode work with custom session handler upon'files'
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-326030@lists.php.net to get a copy of this message
17.03.2017 22:52, Ivan Grigoriev пишет:
I want to implement custom session handler upon internal files handler similar to this: http://php.net/manual/en/class.sessionhandler.php#example-5380 (example 1). But with session.use_strict_mode = 1. I have been trying to test this sample code, but I can't seem to get it to work: --- session_module_name('files'); ini_set('session.use_strict_mode', '1'); class MySessionHandler extends SessionHandler{} session_set_save_handler(new MySessionHandler(), true); session_start(); var_dump(session_id()); --- After delete an existing session file and rerun script, it create new file with the same id. When there is no session_set_save_handler() it works as expected: new file is created with new id. I suppose that it is a bug, but maybe there is a solution that I can't see. This is definitely a bug.
I tried to write a bug report but have no success. https://bugs.php.net/bug.php?id=74255 This is a minimal implementation: <?php session_module_name('files'); ini_set('session.use_strict_mode', '1'); session_set_save_handler(new MySessionHandler(), true); session_start(); var_dump(session_id()); class MySessionHandler extends SessionHandler {
    /**
     * Getting full path to session file
     *
     * It's depend on internal realization of 'files' hander.
     * Must be reviewed after each php release.
     */
    private function getFullPathName(string $key) : string
    {
        if (empty($filename = session_save_path())) {
            $filename = sys_get_temp_dir();
        } elseif (strpos($filename, ';') !== false) {
            $data = explode(';', $filename);
            $count = $data[0];
            $filename = end($data);
            for ($i = 0; $i < $count; $i++) {
                $filename .= '/' . $key[$i];
            }
        }
        return $filename.'/sess_'.$key;
    }
    public function validateId($key)
    {
        return file_exists($this->getFullPathName($key));
    }
}

« previous php.general (#326030) next »