Re: Cannot make use_strict_mode work with custom session handlerupon'files'

[email protected] ("Christoph M. Becker")
Newsgroups php.general
Message-ID <[email protected]>
On 25.03.2017 at 07:19, Ivan Grigoriev wrote:

> 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

Have you tried implementing ::validate_sid(); see
<https://github.com/php/php-src/blob/6053987bc27e8dede37f437193a5cad448f99bce/ext/session/tests/session_set_save_handler_class_018.phpt#L61-L63>.

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

-- 
Christoph M. Becker
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.