在 PHP 5.5.1 中,有对 SessionIdInterface 的引用。然而,它仍然没有记录,我唯一能找到的是接口(interface)定义:
interface SessionIdInterface {
public function create_sid ();
}
- 依赖此界面安全吗?
- 在哪里可以找到有关此界面的某种文档?
最佳答案
SessionIdInterface
是作为 php-src pull request 109 的一部分创建的并登陆 PHP 5.5.1。那里讨论了一些细节。
简而言之,您的 SessionHandlerInterface
实现还可以实现 SessionIdInterface
并提供返回字符串的 create_sid
方法。 PHP 将自动调用 create_sid
,而不是使用 php.ini 中定义的内部 session 创建函数。
这是一个演示其用法的示例脚本。
<?php
class SillySessionHandler implements SessionHandlerInterface, SessionIdInterface {
static $lol_sessions = [];
public function open($save_path, $filename) { return true; }
public function close() { return true; }
public function destroy($session_id) { return true; }
public function gc($lifetime) { return true; }
public function read($session_id) {
return array_key_exists($session_id, static::$lol_sessions) ? static::$lol_sessions[$session_id] : null;
}
public function write($session_id, $session_data) {
static::$lol_sessions[$session_id] = $session_data;
echo "Session data: ", $session_data;
}
public function create_sid() {
$sid = bin2hex(openssl_random_pseudo_bytes(16));
static::$lol_sessions[$sid] = [];
return $sid;
}
}
$handler = new SillySessionHandler;
session_set_save_handler($handler, true);
session_start();
echo "Your session ID is ", session_id(), "<hr>";
$_SESSION['foo'] = 'bar';
示例输出:
Your session ID is 2e837e0c5f5ac1b23296d384a9aab2af
Session data: foo|s:3:"bar";
关于php - PHP 5.5 中未记录的 SessionIdInterface 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20910850/