class FileSessionHandler implements SessionHandlerInterface { private $savePath; /** * 調用 session_start 調用 * * @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 執行完畢調用 * * @return bool */ function close() { echo "close.\n"; return true; } /** * 獲取session數據調用 * * @param string $id * @return string */ function read($id) { echo "read.\n"; return (string)@file_get_contents("$this->savePath/sess_$id"); } /** * session賦值調用 * * @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; } /** * 調用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; } /** * 過時調用 * * @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; } }