Re: Cannot make use_strict_mode work with custom session handler upon'files'
| From: | Ivan Grigoriev | 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));
}
}