php - PHP 5.5 中未记录的 SessionIdInterface 是什么?

标签 php sessionid

在 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/

相关文章:

php - 什么更好?具有相同实体的多个表与具有更多记录的少数关系表

php - 有没有办法在 PHP 的 foreach 循环中以特定值开始?

php - PHP session ID 字符串的长度是多少?

spring - 注销时如何使用户 session 无效?

node.js - nodejs + express + appfog img 资源的不同 session

PHP 在每年的 6 月结束一个财政年度

PHP:收集传递给函数的所有变量作为数组?

php - 如何在 Magento 中设置一个 cron 作业

php - 为什么此函数中没有设置登录名和 session ID?

java - 如何使基于 Spring 的应用程序与 jsessionid URL 参数一起工作