Re: Cannot make use_strict_mode work with custom session handler upon'files'
[email protected] (Ivan Grigoriev)
| Newsgroups | php.general |
|---|---|
| Message-ID | <[email protected]> |
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));
}
}