我搜索了半天如何解决这个问题,但还是没找到答案。我按照 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
objectcache
WHERE 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
我刚刚遇到了同样的问题 - 服务器磁盘空间不足。清理一些空间就可以解决问题。