pantheon-systems/wp-native-php-sessions

WordPress数据库中存储的本地PHP会话。

安装: 667

依赖项: 1

建议者: 0

安全: 0

星级: 138

关注者: 61

分支: 43

开放问题: 13

类型:wordpress-plugin


README

贡献者: getpantheon, outlandish josh, mpvanwinkle77, danielbachhuber, andrew.taylor, jazzs3quence, stovak, jspellman, rwagner00
标签: comments, sessions
最低要求 4.7
测试到 6.3
稳定标签 1.4.3
需要PHP 5.4
许可证: GPLv2或更高版本
许可证URI: https://gnu.ac.cn/licenses/gpl-2.0.html

使用本地PHP会话并保持水平扩展。通过先进技术享受更美好的生活。

描述

Actively Maintained CircleCI

WordPress核心不使用PHP会话,但有时您的用例、插件或主题可能需要它们。

此插件实现了PHP的原生会话处理器,由WordPress数据库支持。这允许插件、主题和自定义代码在PHP默认的临时文件存储无法正常工作的分布式环境中安全地使用PHP $_SESSION

请注意,如果您想贡献,主要开发是在GitHub上

https://github.com/pantheon-systems/wp-native-php-sessions

安装

  1. 上传到/wp-content/plugins/目录
  2. 通过WordPress的“插件”菜单激活插件

这就完成了!

配置

默认情况下,会话有效期设置为0,即直到浏览器关闭。

要覆盖此设置,请在WordPress Native PHP Sessions插件加载之前使用pantheon_session_expiration过滤器。例如,一个小型必须使用插件(即mu-plugin)可以包含

<?php
function my_session_expiration_override() {
    return 60*60*4; // 4 hours
}
add_filter( 'pantheon_session_expiration', 'my_session_expiration_override' );

CLI命令

wp pantheon session add-index

从1.4.0版本开始添加。如果您的插件安装是在1.2.2版本中添加主键索引到会话表之前发生的,则应运行此命令。如果这是这种情况,您在访问任何管理页面时将自动收到通知。如果没有消息,则您的版本可以正常使用。请注意,此命令是非破坏性的,将创建一个新表,并将现有表保留在备份状态下,直到您已验证升级按预期工作。

wp pantheon session primary-key-finalize

从1.4.0版本开始添加。如果您已运行add-index命令并已验证新表正常工作,则运行primary-key-finalize命令将对数据库进行清理并删除备份表。

wp pantheon session primary-key-revert

从1.4.0版本开始添加。如果您已运行add-index命令,但出现了意外情况,只需运行primary-key-revert命令,备份表将立即返回到活动状态。

WordPress多站点

从1.4.2版本开始,add-indexprimary-key-addprimary-key-revert命令完全兼容多站点。

贡献

请参阅CONTRIBUTING.md了解如何贡献信息。

安全策略

报告安全漏洞

请通过Patchstack 漏洞披露计划报告在 Native PHP Sessions 插件的源代码中发现的任何安全漏洞。Patchstack 团队将协助您进行验证、CVE 分配,并通知此插件的开发者。

常见问题解答

为什么不使用其他会话插件呢?

该插件实现了内置的 PHP 会话处理函数,而不是引入任何自定义内容。这样,您可以在代码中使用内置的语言函数,如$_SESSION超级全局变量和session_start()。其他所有内容都将“自动工作”。

为什么要在数据库中存储它们呢?

PHP 的默认回退功能是允许会话存储在临时文件中。这是大多数调用会话的代码默认使用的,在简单用例中它工作得很好,这就是为什么许多插件都这样做的原因。

然而,如果您打算扩展您的应用程序,本地临时文件是一个危险的选择。它们不会在不同应用程序实例之间共享,从而导致难以调试的异常行为。通过将它们存储在数据库中,会话状态将在所有应用程序实例之间共享。

故障排除

如果您看到类似于“致命错误:session_start():初始化存储模块失败”或“警告:ini_set():会话正在激活”的错误,那么您可能有一个插件在 WP Native PHP Sessions 加载之前启动了会话。

要修复此问题,请在wp-content/mu-plugins/000-loader.php创建一个新文件,并包含以下内容:

<?php
require_once WP_PLUGIN_DIR . '/wp-native-php-sessions/pantheon-sessions.php';

此 mu 插件将在所有其他插件之前加载 WP Native PHP Sessions,同时让您仍然可以使用 WordPress 插件更新器来保持插件更新。

升级通知

1.4.0

添加了一个 WP-CLI 命令,如果会话表中尚未存在索引,则添加索引。如果您在版本 1.2.2 之前安装了此插件,则可能需要运行此命令。但是,无论安装时的版本如何,如果您的数据库表缺少索引,则会在您的管理仪表板中显示一条通知。如果没有任何通知,则无需采取任何操作。

变更日志

1.4.3 (2023 年 11 月 13 日)

  • 修复了在单站安装上运行 pantheon session add-index 命令时出现的 PHP 警告。[#285]

1.4.2 (2023 年 11 月 8 日)

  • 修复了与 pantheon session add-index PHP 警告相关的问题。[#276]
  • 修复了建议的 WP CLI 命令中的语法问题。[#278]
  • 使 wp pantheon session add-indexwp pantheon session primary-key-finalizewp pantheon session primary-key-revert 完全支持多站点。[#275]

1.4.1 (2023 年 10 月 23 日)

  • 修复了 pantheon session add-index 命令在 WP 多站点上无法正常工作的问题。[#270]
  • 使 1.4.0 中添加的通知可忽略(存储在用户元数据中)并在多站点中隐藏(即将推出以遍历网络上的所有站点)[#271]

1.4.0 (2023 年 10 月 17 日)

  • 为没有主列(id)的用户添加了新的 CLI 命令,用于向 pantheon_sessions 表添加主列。[#265]
  • 为需要运行新命令的用户添加了仪表板警报。
  • 更新 Pantheon WP 编码标准至 2.0 [#264]
  • 8.3 兼容性和代码质量更新

1.3.6 (2023年6月1日)

  • 修复 PHP 8.2 弃用动态属性错误 [#251] (感谢 @miguelaxcar)
  • 更新 CONTRIBUTING.md [#252].
  • 更新 headers 已发送时的错误信息 [#249].
  • 添加 pantheon-wp-coding-standards [#247].

1.3.5 (2023年4月7日)

  • 将 yoast/phpunit-polyfills 从 1.0.4 升级至 1.0.5 [#245].
  • 提升测试版本

1.3.4 (2023年2月7日)

  • 为 $session->get_data() 添加回退 [[#237(#237)]] (在 WordPress.org 上报告 on WordPress.org)
  • 更新 CODEOWNERS 文件 [#239]
  • 修复 composer.json 文件中的 GPL 许可证 [#236]
  • 将 grunt 从 1.5.3 升级至 1.6.1 [#235]

1.3.3 (2023年1月25日)

  • 在 pantheon-sessions.php 中更新版本 [#234].

1.3.2 (2023年1月25日)

  • PHP 8.2 兼容性 [#232].
  • 将 dealerdirect/phpcodesniffer-composer-installer 从 0.7.2 升级至 1.0.0 [#229].
  • 更新 lint 和 test-behat 作业的图像 [#228].

1.3.1 (2022年12月5日)

  • 记录会话生命周期处理 [#224].
  • 使 dependabot 目标为 develop 分支 [#226].
  • 忽略 .wordpress-org 目录 [#223].

1.3.0 (2022年11月28日)

  • 添加 CONTRIBUTING.MD 和 GitHub 动作以自动化部署到 wp.org. [#219]

1.2.5 (2022年10月28日)

  • 在需要的地方添加 #[ReturnTypeWillChange] 以在 PHP 8.1 中静默弃用警告 [#216].

1.2.4 (2021年9月14日)

  • 将新会话表的数据块大小从 64k 增加到 16M;如果现有表想要应用此更改,则需要手动修改列 [#193].

1.2.3 (2021年4月9日)

  • 在使用查询之前将表名分配给变量 [#188].

1.2.2 (2021年3月29日)

  • 为支持复制包括自动递增的 id 列 [#187].

1.2.1 (2020年9月17日)

  • 插件文本域需要与 WordPress.org 的 slug 相同 [#169].

1.2.0 (2020年5月18日)

  • 当 WP-CLI 运行时避免使用 cookies 会话[#154].

1.1.0(2020年4月23日)

  • 在执行 cron 时避免初始化 PHP 会话[#149].

1.0.0(2020年3月2日)

  • 插件稳定。

0.9.0(2019年10月14日)

  • 将会话回调逻辑重构为 Session_Handler 抽象,修复 PHP 7.3 中的 notice[#135].

0.8.1(2019年8月19日)

  • 修复了 get_client_ip_server() 中对 'X-Forwarded-For' 报头的处理[#126].

0.8.0(2019年8月13日)

  • 尊重客户端 IP 地址的各种 HTTP_* 来源[#122].

0.7.0(2019年4月3日)

  • 添加安全检查,当发现缺少 $wpdb 时将其恢复。

0.6.9(2018年5月15日)

  • 确保 _pantheon_session_destroy() 使用返回值。

0.6.8(2018年5月4日)

  • 触发错误时,改为使用 E_USER_WARNING 而不是 E_WARNING

0.6.7(2018年4月26日)

  • WP_INSTALLING 定义时禁用插件加载,因为会话表创建会破坏安装过程。

0.6.6(2018年3月8日)

  • 当 WP-CLI 运行时恢复会话实例化,因为不这样做会导致其他问题。

0.6.5(2018年2月6日)

  • defined( 'WP_CLI' ) && WP_CLI 定义时禁用会话实例化,因为会话在 CLI 上不可用。

0.6.4(2017年10月10日)

  • 当插件无法将会话写入数据库时触发 PHP 错误。

0.6.3(2017年9月29日)

  • 在完全无法生成会话时返回 false。

0.6.2(2017年6月6日)

  • 在用户登录和注销时同步会话用户 ID。

0.6.1(2017年5月25日)

  • 错误修复:防止 warning session_write_close() 需要正好 0 个参数,但给定了 1 个。

0.6.0(2016年11月23日)

  • 错误修复:通过在 WordPress 的 shutdown 动作中运行,在 $wpdb 自我析构之前,防止 session_write_close() 中的 PHP 致命错误。
  • 错误修复:在会话表中存储实际用户 ID,而不是 (bool) $user_id

0.5

  • 兼容 PHP 7。
  • 添加 pantheon_session_expiration 过滤器以修改会话过期值。

0.4

  • 调整 session_id() 的行为以提高兼容性。
  • 使用超全局变量 REQUEST_TIME 而不是 time()

0.3

  • 修复与 WordPress 插件加载顺序相关的问题。

0.1

  • 首次发布。