2012-11-05 58 views
3

是否可以暫停和恢復Mediawiki編輯?暫停和恢復Mediawiki編輯會話

爲了解釋,我寫了一個訪問外部數據庫的MW擴展;此數據庫需要OAuth身份驗證,這是一個三步過程,要求用戶重定向到外部站點以允許擴展訪問外部數據庫。如果MW擴展已經有extDb的訪問令牌,一切都很好。但是,如果沒有令牌,則存在問題。這是一個標籤擴展,通過在wiki頁面中查找某個XML標籤來觸發,這通常發生在編輯的「預覽」或「提交」中,例如, (解析器鉤子是ParserFirstCallInit)。由OAuth代碼構建的回調網址會將您返回到您正在編輯的頁面,但處於其編輯前狀態:即,您將失去所有編輯。

如何恢復編輯而不會丟失編輯數據?

+0

此功能類似於(現在刪除的)外部編輯器系統嗎? https://www.mediawiki.org/wiki/Manual:External_editors – Nemo

回答

2

您可以使用將數據存儲在$_SESSION中。 MediaWiki本身使用它來存儲用戶身份驗證數據,所以它應該很好地與MediaWiki自己的會話處理集成在一起。

請注意,默認情況下,MediaWiki不會爲匿名用戶創建會話,除非他們嘗試登錄或執行其他需要會話的內容。如果您的外部身份驗證代碼僅供登錄用戶使用,則這不應該成爲問題,但爲了安全起見,您可能需要確保在嘗試使用該會話之前設置了會話:

if (session_id() == '') { 
    wfSetupSession(); 
} 
+0

只有登錄的用戶才能編輯這個wiki,所以這很好。 我對mediawiki核心不是很熟悉;您能否提出任何可用於通過回調URL來觸發加載特定會話的URL參數,例如: http://wiki.com/index.php?action=load&session= ?我查看了index.php的參數,但看不到任何適合的參數。 –

+0

呃......我不確定你想用你的回撥來完成什麼。 PHP(以及MediaWiki)會話通常基於cookie進行加載,因此只要用戶啓用了cookie,他們就可以工作。它也可以[作爲URL參數傳遞會話ID](http://www.php.net/manual/en/session.idpassing.php),但通常不建議(出於安全原因)和我不明白你爲什麼需要這樣做。 –

+0

我想恢復我中斷訪問第三方網站的編輯(請參閱原始Q)。 –