You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Moodle向外发送Session ID等用户专属参数

仅限内容编辑权限下的Moodle参数传递解决方案

方案1:使用Moodle原生支持的变量占位符(无需JS,兼容性最高)

Moodle所有支持HTML的内容编辑区域(页面模块、标签、活动描述、课程模块介绍等)默认支持内置全局变量自动替换,你直接在构造的URL里写入对应占位符即可,Moodle渲染页面时会自动替换为当前访问用户的真实值:

  • 可用通用占位符列表:
    • {{userid}}:当前登录用户的唯一ID,可直接匹配你从数据库读取的mdl_user表id字段
    • {{courseid}}:当前所在课程的ID,对应mdl_course表id字段
    • {{cmid}}:当前课程模块(activity)的ID,对应mdl_course_modules表id字段
    • {{username}}:当前用户的登录名
    • {{sesskey}}:Moodle原生会话校验密钥,等价于你需要的会话相关标识,可直接用于请求合法性校验
  • 构造URL示例:
    你直接在编辑内容时插入如下链接即可,Moodle会自动替换占位符为真实值:
    https://你的外部系统地址/接收接口?userid={{userid}}&cmid={{cmid}}&sesskey={{sesskey}}&courseid={{courseid}}
  • 适用场景:只要你用的是Moodle 3.9及以上版本,该特性默认开启,无需任何后台配置,完全符合仅内容编辑的权限要求。

方案2:前端JS动态取值(适用于旧版本Moodle不支持占位符的场景)

如果你的Moodle版本过低不支持上述占位符,可直接在内容编辑区切换到HTML源码模式,插入如下JS代码动态拼接参数:

// 从Moodle全局变量直接取值
const moodleUserData = {
  userid: M.cfg.userid,
  courseid: M.cfg.courseId,
  sesskey: M.cfg.sesskey,
  cmid: M.cfg.contextinstanceid
};
// 动态构造跳转链接或自动发起请求
const targetUrl = `https://你的外部系统地址/接收接口?${new URLSearchParams(moodleUserData).toString()}`;
// 示例:替换页面上id为ext-link的元素的跳转地址
document.getElementById('ext-link').href = targetUrl;

配套HTML内容(同样在编辑区插入):

<a id="ext-link" href="#">点击访问外部系统</a>
  • 注意事项:仅需确认站点管理员没有禁用编辑器的HTML/JS插入权限,绝大多数普通Moodle站点默认允许教师/编辑者在自己的课程内容里插入自定义HTML代码。

校验说明

你拿到外部系统接收到的参数后,可直接和你从Moodle数据库同步的数据做匹配校验:

  • userid对应mdl_user.id
  • cmid对应mdl_course_modules.id
  • sesskey可直接匹配mdl_sessions.sesskey字段,用于校验会话有效性,避免参数伪造

内容的提问来源于stack exchange,提问作者Fred Lackey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:06:01