Рубрики
Uncategorized

Метод вызова хранилища файлов сеанса PHP

Автор оригинала: David Wong.

class FileSessionHandler implements SessionHandlerInterface
{
    private $savePath;
    
    /**
     * Call session_start call
     *
     * @param string $savePath
     * @param string $sessionName
     * @return bool
     */
    function open($savePath, $sessionName)
    {
        echo "open.\n";
        $this->savePath = $savePath;
        if (!is_dir($this->savePath)) {
            mkdir($this->savePath, 0777);
        }

        return true;
    }
    
    /**
     * session executes the call
     *
     * @return bool
     */
    function close()
    {
        echo "close.\n";

        return true;
    }
    
    /**
     * Get session data calls
     *
     * @param string $id
     * @return string
     */
    function read($id)
    {
        echo "read.\n";

        return (string)@file_get_contents("$this->savePath/sess_$id");
    }
    
    /**
     * session assignment call
     *
     * @param string $id
     * @param string $data
     * @return bool
     */
    function write($id, $data)
    {
        echo "write.\n";

        return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
    }
    
    /**
     * Call session_destory
     *
     * @param string $id
     * @return bool
     */
    function destroy($id)
    {
        echo "destroy.\n";

        $file = "$this->savePath/sess_$id";
        if (file_exists($file)) {
            unlink($file);
        }

        return true;
    }
    
    /**
     * Expired calls
     *
     * @param int $maxlifetime
     * @return bool
     */
    function gc($maxlifetime)
    {
        echo "gc.\n";

        foreach (glob("$this->savePath/sess_*") as $file) {
            if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
                unlink($file);
            }
        }

        return true;
    }
}