sess_filename = $path; $this->minutes = $minutes; // Set handler to overide SESSION session_set_save_handler( array($this, "open"), array($this, "close"), array($this, "read"), array($this, "write"), array($this, "destroy"), array($this, "gc") ); // Start the session session_name(SESSION_NAME); session_start(); } /** open * set filename; * no need to touch the filesystem yet * return true (always) */ public function open($savePath, $sessionName): bool { $this->sess_filename = $this->$path .'/'. $sessionName; return true; } /** close * nothing needs to be closed; * return true (always) */ public function close(): bool { return true; } /** read * chech if file exists; if not return false * read data */ public function read($sessionId): string|false { if (!file_exists($filename) || !is_readable($filename)) return false; return file_get_contents($filename); # if ($this->files->isFile($path = $this->path.'/'.$sessionId) && # $this->files->lastModified($path) >= Carbon::now()->subMinutes($this->minutes)->getTimestamp()) { # return $this->files->sharedGet($path); # } # depricated? return ''; } /** write * data serielized already by php's internal session engine */ public function write($sessionId, $data): bool { $h = fopen($filename, 'w'); if (fwrite($h,$data) === false) { throw new Exception('Could not write session data'); return false; } fclose($h); return true; } /** * {@inheritdoc} * * @return bool */ public function destroy($sassionID): bool { unlink($this->sassionID); return true; } /** * {@inheritdoc} * * @return int */ public function gc($lifetime) : int { $files = Finder::create() ->in($this->path) ->files() ->ignoreDotFiles(true) ->date('<= now - '.$lifetime.' seconds'); $deletedSessions = 0; foreach ($files as $file) { $this->files->delete($file->getRealPath()); $deletedSessions++; } return $deletedSessions; } }