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

RAD Studio/Delphi及RAD Server技术问询:添加JSON键值对与会话令牌跟踪

问题2:RAD Server中跟踪REST客户端的会话令牌

RAD Server的内置认证生成的会话令牌,其实是由TRestSessionManager统一管理的,完全不需要依赖Sencha/ExtJS,纯HTML/JS客户端就能实现,我给你梳理下具体步骤:

1. 服务器端如何跟踪会话令牌

在你的RAD Server REST资源方法中,可以直接获取当前请求的会话令牌,并通过会话管理器获取会话详情:

procedure TUserResource.GetUserProfile(const AContext: TRESTContext;
  const ARequest: TRESTRequest; const AResponse: TRESTResponse);
var
  LSession: TRestSession;
begin
  // 从请求中自动解析Authorization头里的Bearer令牌
  if Assigned(ARequest.SessionToken) then
  begin
    LSession := RESTSessionManager.GetSession(ARequest.SessionToken);
    if Assigned(LSession) then
    begin
      // 返回当前登录用户的基本信息
      AResponse.Content := Format('当前用户:%s,登录时间:%s', 
        [LSession.Username, LSession.CreationTime.ToString]);
      // 还可以往会话中存储自定义数据,比如上次访问时间
      LSession.Data['last_access'] := Now.ToString;
    end
    else
      AResponse.StatusCode := 401; // 令牌无效
  end
  else
    AResponse.StatusCode := 401; // 请求未携带令牌
end;

如果需要做更复杂的跟踪(比如会话日志、超时提醒),可以继承TRestSessionManager,重写CreateSession、DestroySession方法,在这些钩子中加入自定义逻辑,比如把会话创建记录写入业务数据库。

2. HTML客户端如何携带令牌

登录成功后,服务器会返回会话令牌(通常在响应体或者X-RAD-Session-Token响应头里),客户端需要把这个令牌存在本地(比如localStorage),之后每次请求都带上:

// 登录成功后保存令牌到本地
fetch('https://your-rad-server/api/auth/login', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({username: 'test_user', password: 'your_password'})
})
.then(res => res.json())
.then(data => {
  localStorage.setItem('rad_session_token', data.token);
});

// 后续请求携带令牌访问资源
fetch('https://your-rad-server/api/user/profile', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + localStorage.getItem('rad_session_token'),
    'Content-Type': 'application/json'
  }
});

如果你的RAD Server配置了自定义令牌头,也可以用X-Session-Token: <token>这种方式,服务器端通过ARequest.Headers.Values['X-Session-Token']获取令牌后,再调用RESTSessionManager.GetSession查找会话。

3. 关键配置提醒

  • 在RAD Server管理控制台中,确保Session Manager的配置正确,比如会话超时时间、存储方式(内存或数据库),生产环境建议用数据库存储会话,避免服务器重启丢失会话数据。
  • 一定要用HTTPS传输令牌,防止被中间人窃取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:37:14