Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace Illuminate\Session;use Illuminate\Filesystem\Filesystem;use Illuminate\Support\Carbon;use SessionHandlerInterface;use Symfony\Component\Finder\Finder;class FileSessionHandler implements SessionHandlerInterface{/*** The filesystem instance.** @var \Illuminate\Filesystem\Filesystem*/protected $files;/*** The path where sessions should be stored.** @var string*/protected $path;/*** The number of minutes the session should be valid.** @var int*/protected $minutes;/*** Create a new file driven handler instance.** @param \Illuminate\Filesystem\Filesystem $files* @param string $path* @param int $minutes* @return void*/public function __construct(Filesystem $files, $path, $minutes){$this->path = $path;$this->files = $files;$this->minutes = $minutes;}/*** {@inheritdoc}** @return bool*/public function open($savePath, $sessionName): bool{return true;}/*** {@inheritdoc}** @return bool*/public function close(): bool{return true;}/*** {@inheritdoc}** @return string|false*/public function read($sessionId): string|false{if ($this->files->isFile($path = $this->path.'/'.$sessionId) &&$this->files->lastModified($path) >= Carbon::now()->subMinutes($this->minutes)->getTimestamp()) {return $this->files->sharedGet($path);}return '';}/*** {@inheritdoc}** @return bool*/public function write($sessionId, $data): bool{$this->files->put($this->path.'/'.$sessionId, $data, true);return true;}/*** {@inheritdoc}** @return bool*/public function destroy($sessionId): bool{$this->files->delete($this->path.'/'.$sessionId);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;}}