我怎样才能让我的 mediawiki 不再认为我已禁用 cookies?

我怎样才能让我的 mediawiki 不再认为我已禁用 cookies?

我搜索了半天如何解决这个问题,但还是没找到答案。我按照 Mediawiki 网站上的说明将我的 wiki 变成了一个简单的私人 wiki,但不久之后,它就开始给我这个奇怪的登录错误消息: Wiki 使用 cookie 来登录用户。您已禁用 cookie。请启用它们并重试。

如果我删除这些私人 wiki 设置,即使我尝试登录,错误也会消失。但我需要它是仅供我的团队使用的私人 wiki。那么我该怎么办?

这是我目前所做的。为了安全起见,每次更改后,我都会尝试使用以下命令重新启动 Apache:

  • sudo /etc/init.d/apache2 重新启动

在我的 php.ini 文件中,我有以下设置:

  • session.save_path = “/var/lib/php5”
  • session.cookie_secure = 安全
  • session.cookie_path = /tmp session.cookie_domain = 我的服务器的内部 URL(我应该设置这个吗?这个字段之前是空白的,但没有被注释掉)
  • session.referer_check = Off

我运行了以下命令来确保文件夹可写:

  • sudo chmod -R 1777 /var/lib/php5
  • sudo chmod -R 1777 /tmp

在我的 LocalSettings.php 文件中,我在设置文件的底部添加了以下内容:

  • session_save_path(“tmp”);
  • $wgSessionsInObjectCache = 真;
  • $wgMainCacheType = CACHE_ANYTHING;
  • $wgDebugToolbar = true;
  • $wgDebugLogFile='/var/log/mediawiki/mediawiki.log';
  • $wgShowException详细信息 = 真;
  • $wgShowDebug = 真;
  • $wgDevelopmentWarnings = 真;

对于上述 tmp,我创建了文件夹 /etc/mediawiki/tmp 并运行了以下命令:

  • sudo chmod -R 1777 /etc/mediawiki/tmp

我知道该 cookie 正在通过浏览器,因为我可以在 Firebug 中看到该 cookie,并验证在 /tmp 文件夹中创建了相同的 cookie。

SSL 似乎配置正确,因为我得到了绿色锁。

这是我尝试登录后的调试输出:

调试数据:

  • 开始请求

  • 发布/mediawiki/index.php?title=Special:UserLogin&action=submitlogin&type=login&returnto=Special:RecentChanges

  • HTTP 标头:
  • 主办方:bs-wiki.sis.org.cn
  • 连接:保持活动
  • 内容长度:122
  • 缓存控制:最大年龄=0
  • 接受:text/html、application/xhtml+xml、application/xml;q=0.9、image/webp,/;q=0.8
  • 起源:https://bs-wiki.sis.org.cn
  • 升级不安全请求:1
  • 用户代理:Mozilla/5.0(Macintosh;Intel Mac OS X 10_11_3)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/48.0.2564.97 Safari/537.36
  • 内容类型:application/x-www-form-urlencoded
  • 未使用:1
  • 引荐人:https://bs-wiki.sis.org.cn/mediawiki/index.php?title=Special:UserLogin&returnto=Special%3ARecentChanges&returntoquery=
  • 接受编码:gzip,deflate
  • 接受语言: en-US,en;q=0.8
  • COOKIE:__gads=ID=f46767e352615a06:T=1453974579:S=ALNI_MaImAtsIj8Xb-3kERZtmSWx82DxNA; bs_wikiUserName=Rpark1; bs_wikiLoggedOut=20160128105049; bs_wiki_session=3fck92pn1uq1l1s852oq6rfdl3

  • 缓存:SqlBagOStuff[主要] SqlBagOStuff[消息] SqlBagOStuff[解析器]

  • 连接到本地主机 bs_wiki...
  • 调用 Profiler::instance 时未设置 $wgProfiler['class'],出于安全考虑,回退到 ProfilerStub
  • 连接到本地主机 bs_wiki。
  • 连接到本地主机 bs_wiki...
  • 连接到本地主机 bs_wiki。
  • DatabaseBase::query: 写入完成:DELETE FROM objectcacheWHERE keyname = 'bs_wiki:stats:request_with_session'
  • LocalisationCache:使用存储 LCStore_DB
  • 在调用 $wgParser::setFunctionHook 时取消对 $wgParser 的存根处理,未知
  • 解析器:使用预处理器:Preprocessor_DOM
  • 完全初始化
  • 在调用 $wgAuth::validDomain 时取消对 $wgAuth 的存根处理,未知
  • IP:172.18.12.59
  • MessageCache::load:正在加载信息...从全局缓存中获取
  • 调用 $wgLang::_unstub 取消 $wgLang 的存根,调用者未知
  • MWCryptRand::realGenerate:为 LoginForm::setLoginToken/MWCryptRand::generateHex/MWCryptRand::realGenerateHex/MWCryptRand::generate/MWCryptRand::realGenerate 生成加密随机字节
  • MWCryptRand::realGenerate:openssl_random_pseudo_bytes 生成了 16 个字节的强随机性。
  • MWCryptRand::realGenerate:缓冲区中剩余 0 字节的随机性。
  • 未找到 SkinVector 类;跳过加载
  • 未找到类 PEAR_Error;跳过加载

答案1

Basd82 在其他地方报告说您必须session.referer_check = Off在 php.ini 中进行设置。

session_save_path("tmp")肯定是错的,你的目录叫做/tmp。(如果你按照JesseG17 的建议,你忘了步骤3。)但是,与$wgSessionsInObjectCache = true应该session.save_path无关。

你有$wgMainCacheType = CACHE_ANYTHING,但您是否检查过缓存是否真的有效?请按照缓存手册并安装适当的对象缓存(这始终是一个好主意)。

答案2

不知道为什么它现在起作用了,但从头开始,回到了原来的说明https://www.mediawiki.org/wiki/Manual:Preventing_access#Simple_private_wiki现在可以正常工作了。

嗯,不是完全从头开始,我没有将更改恢复到 php.ini。所以不确定这是否解决了问题。无论如何,它现在正在工作,所以我很高兴…… :)

答案3

我刚刚遇到了同样的问题 - 服务器磁盘空间不足。清理一些空间就可以解决问题。

相关内容