Web lists-archives.com

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




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

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