如何更改MediaWiki会话时间?

时间:2016-02-03 13:27:29

标签: php apache session mediawiki

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

  2. MediaWiki通过其代码处理其会话。暂时离开php和apache。专注于媒体维基的配置设置。

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

  4. 希望能解决您的问题。

答案 2 :(得分:0)

就我而言,已将 $wgMainCacheType 更改为 'CACHE_ACCEL' 以在 php 服务器本身中启用 apcu 和 opcache。默认情况下,我已将 $wgSessionCacheType 从配置文件中删除,默认为“CACHE_ANYTHING”。在此配置中,令牌存储在 php“服务器”APCu 缓存中。

## Shared memory settings
$wgMainCacheType = CACHE_ACCEL;

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

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

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

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

我需要补充的是:

$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。