Linux

如何讓我的 mediawiki 不再認為我禁用了 cookie?

  • May 24, 2017

我已經搜尋了半天來解決這個問題,但無法弄清楚。在我根據 Mediawiki 網站上的說明將我的 wiki 設為一個簡單的私人 wiki 後不久,它開始給我這個奇怪的登錄錯誤消息: Wiki 使用 cookie 登錄使用者。您已禁用 cookie。請啟用它們並重試。

如果我刪除了這些私人 wiki 設置,即使我嘗試登錄,錯誤也會消失。但我需要它成為僅供我團隊使用的私人 wiki。那我該怎麼辦?

這是我到目前為止所做的。為了安全起見,在更改後,我嘗試使用以下命令重新啟動 Apache:

  • 須藤 /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 = 關閉

我執行以下命令以確保文件夾是可寫的:

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

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

  • session_save_path(“tmp”);
  • $wgSessionsInObjectCache = true;
  • $wgMainCacheType = CACHE_ANYTHING;
  • $wgDebugToolbar = 真;
  • wgDebugLogFile = ‘/var/log/mediawiki/mediawiki.log’;
  • $wgShowExceptionDetails = 真;
  • $wgShowDebug = 真;
  • $wgDevelopmentWarnings = true;

對於上面的 tmp,我創建了文件夾 /etc/mediawiki/tmp 並且還執行了以下命令:

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

我知道 cookie 正在通過瀏覽器,因為我可以在 Firebug 中看到 cookie 並驗證在 /tmp 文件夾中創建了相同的 cookie。

SSL 似乎配置正確,因為我得到了綠色鎖。

這是我嘗試登錄後的調試輸出:

調試數據:

  • 開始請求
  • POST /mediawiki/index.php?title=Special:UserLogin&action=submitlogin&type=login&returnto=Special:RecentChanges
  • HTTP 標頭:
  • 主辦方:bs-wiki.sis.org.cn
  • 連接:保持活動
  • 內容長度:122
  • 記憶體控制:max-age=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, like Gecko) Chrome/48.0.2564.97 Safari/537.36
  • 內容類型:應用程序/x-www-form-urlencoded
  • DNT: 1
  • 參考:https ://bs-wiki.sis.org.cn/mediawiki/index.php?title=Special:UserLogin&returnto=Special%3ARecentChanges&returntoquery=
  • 接受編碼:gzip,放氣
  • 接受語言:en-US,en;q=0.8
  • 餅乾:__gads=ID=f46767e352615a06:T=1453974579:S=ALNI_MaImAtsIj8Xb-3kERZtmSWx82DxNA;bs_wikiUserName=Rpark1; bs_wikiLoggedOut=20160128105049; bs_wiki_session=3fck92pn1uq1l1s852oq6rfdl3
  • 記憶體:SqlBagOStuff

$$ main $$SqlBagOStuff$$ message $$SqlBagOStuff$$ parser $$

  • 正在連接到 localhost bs_wiki…
  • Profiler::instance 在沒有 $wgProfiler 的情況下呼叫$$ ‘class’ $$設置,為安全起見回退到 ProfilerStub
  • 連接到本地主機 bs_wiki。
  • 正在連接到 localhost bs_wiki…
  • 連接到本地主機 bs_wiki。
  • DatabaseBase::query: 寫入完成:從objectcache哪裡刪除 keyname = ‘bs_wiki:stats:request_with_session’
  • LocalisationCache:使用儲存 LCStore_DB
  • 不存根 $ wgParser on call of $ wgParser::setFunctionHook 來自未知
  • 解析器:使用預處理器:Preprocessor_DOM
  • 完全初始化
  • 不存根 $ wgAuth on call of $ wgAuth::validDomain 來自未知
  • IP:172.18.12.59
  • MessageCache::load: Loading en… 從全域記憶體中獲取
  • 不存根 $ wgLang on call of $ wgLang::_unstub 來自未知
  • 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;跳過載入

不知道為什麼它現在可以工作,但是從頭開始並回到https://www.mediawiki.org/wiki/Manual:Preventing_access#Simple_private_wiki上的原始說明,現在它可以工作了。

好吧,不是完全從頭開始,我沒有恢復對 php.ini 的更改。所以不確定是否修復了它。無論哪種方式,它現在都在工作,所以我很高興…. :)

Basd82 其他地方報告您必須session.referer_check = Off在 php.ini 中設置。

session_save_path("tmp")肯定是錯的,你的目錄叫做/tmp. (如果您按照JesseG17 的建議,您忘記了第 3 步。)但是,與$wgSessionsInObjectCache = true應該session.save_path無關。

你有$wgMainCacheType = CACHE_ANYTHING,但你檢查過記憶體是否真的有效嗎?遵循記憶體手冊並安裝適當的對象記憶體(這總是一個好主意)。

引用自:https://serverfault.com/questions/752375