Speed up development with full-stack environments for every branch.

Learn More

Using SessionHandlerInterface [PHP]

79 Runs 1016 Views 234 Copies
Saved

Saved

gtsolutions 373

gtsolutions
published 4 years ago

<?php
/*
 *  PHP Session - Using SessionHandlerInterface
 *  The following example provides file based session storage similar to the PHP sessions default save handler files. 
 *  This example could easily be extended to cover database storage using your favorite PHP supported database engine.

 *  Note we use the OOP prototype with session_set_save_handler() and register the shutdown function using the function's parameter flag. 
 * This is generally advised when registering objects as session save handlers. 
 */


class MySessionHandler implements SessionHandlerInterface
{
    private $savePath;

    public function open($savePath, $sessionName)
    {
        $this->savePath = $savePath;
        if (!is_dir($this->savePath)) {
            mkdir($this->savePath, 0777);
        }

        return true;
    }

    public function close()
    {
        return true;
    }

    public function read($id)
    {
        return (string)@file_get_contents("$this->savePath/sess_$id");
    }

    public function write($id, $data)
    {
        return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
    }

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

        return true;
    }

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

        return true;
    }
}

$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();

// proceed to set and retrieve values by key from $_SESSION

?>
Please login/signup to get access to the terminal.

Your session has timed out.

Dismiss (the page may not function properly).