【问题标题】:How to change MediaWiki session time?如何更改 MediaWiki 会话时间?
【发布时间】:2016-05-12 17:30:12
【问题描述】:

当我编辑页面并长时间保持打开状态时,我收到错误“抱歉!由于会话数据丢失,我们无法处理您的编辑。请重试。如果仍然无法正常工作,请尝试登录尝试保存页面时退出并重新登录。

我认为它与会话有关?如果是这样,我怎样才能增加最大会话时间?我已经在 php.ini 中尝试过 session.gc_maxlifetime (是的,我重新启动了 Apache)但这没有任何区别(这意味着我尝试了 30 秒但我仍然可以保存编辑几分钟后的页面)。还是我必须使用 MW 配置设置?

【问题讨论】:

  • 您是否尝试过 this thorough answer 在 PHP/Apache 上的会话超时,包括 session_set_cookie_paramsMediaWiki.org 表示这是一个 PHP 问题,所以 session.gc_maxlifetime 应该是您的答案。
  • 好吧,我是系统管理员而不是程序员(在这个项目中)。我不想更改程序或脚本代码,只是配置设置。这应该可能吗?正如我所说,我尝试了 session.gc_maxlifetime 设置
  • 默认为 1440(秒)- 24 分钟。 php.ini 文件应该已经包含这个值,您可以更新它吗?您可以尝试将这些参数添加到 MediaWiki 中的 LocalSettings.php 文件中:ini_set(session.cookie_lifetime, 3600); ini_set(session.gc_maxlifetime, 3600);(3600 秒 = 1 小时)?

标签: php apache session mediawiki


【解决方案1】:

在我的例子中,将 $wgMainCacheType 更改为“CACHE_ACCEL”以在 php 服务器本身中启用 apcu 和 opcache。我在默认的“CACHE_ANYTHING”中将 $wgSessionCacheType 留在了配置文件之外。在此配置中,令牌存储在 php“服务器”APCu 缓存中。

## Shared memory settings
$wgMainCacheType = CACHE_ACCEL;

这会导致当 APCu 清除其状态时,这种“实时”飞行中的会话令牌会很快被清除,这更多是为了提高性能,并且是为了相当动态的。

因此,我会收到“抱歉!由于会话数据丢失,我们无法处理您的编辑。”非常快速且不一致,例如 30 秒、1-2 分钟或 5 分钟。这真的很烦人。

MediaWiki 中的页面编辑需要匹配类型的“活动令牌”来完成。通常,如果丢失,它只会不断重新生成,除非提交编辑。作为一种安全措施,我认为这是为了防止已经注销的人意外进行过时的编辑。

发生的事情是浏览器很好,但是 APCu 中的实时令牌缓存对象正在被清除,因为没有足够快地使用,因为我已经停止编辑......,并且服务器端没有匹配提交时的令牌。

我需要补充的是:

$wgSessionCacheType = CACHE_DB;

这会导致会话安全令牌根据 MediaWiki 规则而不是动态对象缓存规则正确持久化。这里解释一下:https://www.mediawiki.org/wiki/Manual:$wgSessionCacheType

为了正确操作,必须将其设置为持久缓存,如果 有多个服务器可能为单个客户端的请求提供服务 缓存必须由所有人共享。

如果 $wgMainCacheType 设置为 CACHE_ACCEL 并保留在其 默认CACHE_ANYTHING,使用的缓存可能不满足这些 要求。

解决方案是将其设置为适当的缓存,例如 CACHE_DB。

在这里:https://www.mediawiki.org/wiki/Manual:$wgMainCacheType

自 MediaWiki 1.27 起,PHP 会话存储在缓存中,具体取决于 此设置的变量,除非被 $wgSessionCacheType。这可能会在使用 CACHE_ACCEL 时引起问题 如果 apcu 配置错误(参见任务 T147161)。

CACHE_ACCEL 自 MediaWiki 1.31 起仅支持 APCu 或 WinCache。

【讨论】:

    【解决方案2】:

    我刚刚解决了这个问题,这就是为我解决的问题。

    1. 将 MediaWiki 升级到最新版本(重要)我遇到了版本 1.26.0 的问题。

    2. MediaWiki 通过其代码处理其会话。暂时不要管 php 和 apache。专注于媒体 wiki 的配置设置。

    3. 尝试在您的配置中设置 $wgCookieExpiration = 86400(例如 1 天)并设置 $wgExtendedLoginCookieExpiration = null 看看会发生什么。

    希望能解决您的问题。

    【讨论】:

      【解决方案3】:

      如果启用$wgSessionsInObjectCache,则增加$wgObjectCacheSessionExpiry。否则,会话由 PHP 保存,您应该按照其他 cmets 的建议更改相关配置。

      【讨论】:

        猜你喜欢
        • 2011-05-19
        • 2012-02-29
        • 1970-01-01
        • 2010-10-14
        • 2013-12-20
        • 1970-01-01
        • 2012-06-26
        • 2015-01-10
        • 2014-07-25
        相关资源
        最近更新 更多