在PHP 5.5.1中,引用了SessionIdInterface。但是,它仍然没有记录,我唯一能找到的是接口定义:
interface SessionIdInterface {
public function create_sid ();
}
答案 0 :(得分:1)
根据PHP源代码:
/* {{{ SessionIdInterface functions[]
*/
static const zend_function_entry php_session_id_iface_functions[] = {
PHP_ABSTRACT_ME(SessionIdInterface, create_sid, arginfo_session_class_create_sid)
{ NULL, NULL, NULL }
};
/* }}} */
/* {{{ SessionHandler functions[]
*/
static const zend_function_entry php_session_class_functions[] = {
PHP_ME(SessionHandler, open, arginfo_session_class_open, ZEND_ACC_PUBLIC)
PHP_ME(SessionHandler, close, arginfo_session_class_close, ZEND_ACC_PUBLIC)
PHP_ME(SessionHandler, read, arginfo_session_class_read, ZEND_ACC_PUBLIC)
PHP_ME(SessionHandler, write, arginfo_session_class_write, ZEND_ACC_PUBLIC)
PHP_ME(SessionHandler, destroy, arginfo_session_class_destroy, ZEND_ACC_PUBLIC)
PHP_ME(SessionHandler, gc, arginfo_session_class_gc, ZEND_ACC_PUBLIC)
PHP_ME(SessionHandler, create_sid, arginfo_session_class_create_sid, ZEND_ACC_PUBLIC)
{ NULL, NULL, NULL }
};
此SessionIdInterface
中的create_sid
和SessionHandler
中没有任何其他方法与{{1}}
答案 1 :(得分:1)
SessionIdInterface
是作为php-src pull request 109的一部分创建的,并在PHP 5.5.1中登陆。有关它的一些细节在那里讨论。
简而言之,您的SessionHandlerInterface
实现也可以实现SessionIdInterface
并提供返回字符串的create_sid
方法。 PHP将自动调用create_sid
,而不是使用php.ini中定义的内部会话创建函数。
这是一个演示使用的示例脚本。
<?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';
示例输出:
您的会话ID为2e837e0c5f5ac1b23296d384a9aab2af
<小时/> 会话数据:foo | s:3:“bar”;