Web lists-archives.com

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




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));
    }
}

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php