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

From: Date: Sat, 25 Mar 2017 10:17:04 +0000
Subject: Re: Cannot make use_strict_mode work with custom session handlerupon'files'
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-326031@lists.php.net to get a copy of this message
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

« previous php.general (#326031) next »