首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SessionHandlerInterface (class)

Introduction

(PHP 5 >= 5.4.0, PHP 7)

SessionHandlerInterface is an interface which defines a prototype for creating a custom session handler. In order to pass a custom session handler to session_set_save_handler() using its OOP invocation, the class must implement this interface.

Please note the callback methods of this class are designed to be called internally by PHP and are not meant to be called from user-space code.

Class synopsis

SessionHandlerInterface {

/* Methods */

代码语言:javascript
复制
abstract public bool close ( void )
代码语言:javascript
复制
abstract public bool destroy ( string $session_id )
代码语言:javascript
复制
abstract public bool gc ( int $maxlifetime )
代码语言:javascript
复制
abstract public bool open ( string $save_path , string $session_name )
代码语言:javascript
复制
abstract public string read ( string $session_id )
代码语言:javascript
复制
abstract public bool write ( string $session_id , string $session_data )

}

Example #1 Example 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.

Caution

For brevity, this example omits input validation. However, the $id parameters are actually user supplied values which require proper validation/sanitization to avoid vulnerabilities, such as path traversal issues. So do not use this example unmodified in production environments.

代码语言:javascript
复制
<?php
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

Table of Contents

  • SessionHandlerInterface::close — Close the session
  • SessionHandlerInterface::destroy — Destroy a session
  • SessionHandlerInterface::gc — Cleanup old sessions
  • SessionHandlerInterface::write — Write session data

← SessionHandler::write

SessionHandlerInterface::close →

代码语言:txt
复制
 ? 1997–2017 The PHP Documentation Group

Licensed under the Creative Commons Attribution License v3.0 or later.

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com