【问题标题】:Pausing and resuming a Mediawiki edit session暂停和恢复 Mediawiki 编辑会话
【发布时间】:2012-11-05 22:00:08
【问题描述】:

是否可以暂停和恢复 Mediawiki 编辑?

为了解释,我编写了一个访问外部数据库的 MW 扩展;此数据库需要 OAuth 身份验证,这是一个三步过程,需要将用户重定向到外部站点以允许扩展访问外部数据库。如果 MW 扩展已经拥有 extDb 的访问令牌,那么一切都很好。但是,如果没有令牌,就会有问题。这是一个标签扩展,通过在 wiki 页面中找到某个 XML 标签来触发,这通常发生在编辑的“预览”或“提交”中,例如http://server.com/wiki/index.php?title=Bibliography&action=submit(解析器挂钩是ParserFirstCallInit)。由 OAuth 代码构造的回调 URL 会将您返回到您正在编辑的页面,但处于其预编辑状态:即您丢失了所有编辑。

我怎样才能恢复编辑而不丢失我的编辑数据?

【问题讨论】:

标签: session cookies mediawiki edit


【解决方案1】:

您可以将数据存储在$_SESSION 中。 MediaWiki 本身使用它来存储用户身份验证数据,因此它应该与 MediaWiki 自己的会话处理很好地集成。

请注意,默认情况下,MediaWiki 不会为匿名用户创建会话,除非他们尝试登录或执行其他需要会话的操作。如果您的外部身份验证代码仅供登录用户使用,这应该不是问题,但为了安全起见,您可能需要确保在尝试使用之前设置了会话:

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

【讨论】:

  • 只有登录的用户才能编辑这个wiki,所以没问题。我对 mediawiki 核心不是很熟悉;您能否建议任何可用于通过回调 URL 触发特定会话加载的 URL 参数,例如wiki.com/index.php?action=load&session=<session_id>?我查看了 index.php 的参数,但看不到任何合适的参数。
  • 嗯...我不确定您要通过回调完成什么。 PHP(以及 MediaWiki)会话通常基于 cookie 加载,因此只要用户启用了 cookie,它们就应该可以正常工作。 pass the session ID as a URL parameter 也可以,但通常不建议这样做(出于良好的安全原因),我不明白你为什么需要这样做。
  • 我想恢复我为访问第三方网站而中断的编辑(见原Q)。
  • 我明白这一点,但您不需要在 URL 中包含会话 ID 来执行此操作。相反,只需生成一个带有 $id = uniqid() 之类的唯一 ID,将编辑后的文本保存在 $_SESSION['myExtSavedEdits'][$id] 中,并在回调 URL 中包含 $id(例如 ?action=edit&amp;resume_edit=$id)。然后,在某个合适的钩子中,使用$request-&gt;getVal('resume_edit') 查找它(其中$request 是一个WebRequest 对象),如果找到,使用它来预填编辑表单。
  • 附言。除了文本之外,您可能还希望在会话中保存一堆编辑元数据,例如正在编辑的页面和编辑的开始时间(用于编辑冲突检测)。
猜你喜欢
  • 2022-01-26
  • 2023-04-03
  • 2013-07-19
  • 2015-07-28
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多