FileSessionHandler.php
TLDR
The FileSessionHandler.php
file is a class implementation of the SessionHandlerInterface
for handling sessions using the file system. It provides methods for opening and closing the session, reading, writing, and destroying session data, and garbage collection of expired sessions.
Methods
open
The open
method is used to open the session. It takes the save path and session name as parameters and returns a boolean value indicating the success of the operation.
close
The close
method is used to close the session. It does not take any parameters and returns a boolean value indicating the success of the operation.
read
The read
method is used to read session data. It takes the session ID as a parameter and returns the session data as a string or false if the session does not exist or has expired.
write
The write
method is used to write session data. It takes the session ID and data as parameters and returns a boolean value indicating the success of the operation.
destroy
The destroy
method is used to destroy a session. It takes the session ID as a parameter and returns a boolean value indicating the success of the operation.
gc
The gc
method is used for garbage collection of expired sessions. It takes the lifetime of a session as a parameter and returns the number of deleted sessions.
Classes
There are no other classes defined in the file.
<?php
namespace 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;
}
}