Delphi 7 SOAP 身份验证和会话 ID 如何
Posted
技术标签:
【中文标题】Delphi 7 SOAP 身份验证和会话 ID 如何【英文标题】:Delphi 7 SOAP Authentication and SessionID HowTo 【发布时间】:2010-05-13 14:07:29 【问题描述】:我正在开发一个 3 层数据库应用程序。 1.) MS SQL 数据库 2.) 连接到数据库的中间层 SOAP 服务器(使用 Delphi 7) 3.) 客户端(首先是 win32 gui(使用 Delphi 7)-后来是其他平台)连接到 SOAP 服务器
我选择了一个 SOAP 服务器,以便在稍后阶段向各种客户端开放(还有一些 win32 gui 客户端将驻扎在国外 - 所以客户端需要瘦)(这是 Bob 博士建议的)。
我是 SOAP 新手,并且一直在查看有关身份验证的不同示例和论文。但我无法完全理解它。
我已经使用 Delphi 的 SOAP 服务器应用程序向导制作了一个 SOAP 服务器和客户端,并添加了一个 SOAP SERVER 数据模块,添加了一个数据库连接以及一些数据集和提供程序。将客户端与 dbgrid 等连接起来,该部分工作正常。
但我希望客户端首先登录然后能够访问数据,并且我希望服务器记录每个连接以及客户端注销或断开连接时,所以我猜我需要 sessionID 和超时。我还希望服务器能够在任何给定时间告诉客户端还有谁“连接”(或谁的会话仍处于活动状态)。 我已经收集到我需要制作一个身份验证标头,但无法弄清楚我可以在哪里或谁可以获得 sessionID。我假设每次客户端连接到服务器时服务器都会生成一个 sessionID?我怎么得到这个?
任何帮助或建议/指针将不胜感激,
谢谢 贾斯汀
【问题讨论】:
【参考方案1】:默认情况下,Soap 服务器不提供会话。您的服务器必须实现会话生命周期管理(登录/注销)等。
这里记录了一个基本解决方案:Managing sessions with Delphi 6 Web services
但请注意,此解决方案远非完美(参见 cmets),例如它不提供会话超时机制。
【讨论】:
【参考方案2】:好的 - 想通了 - 我没有:
InvRegistry.RegisterHeaderClass(TypeInfo(IThorPayServerDB), TAuthHeader);
在初始化中
但我仍然不知道如何获取会话 ID - 或者一些知道哪个客户端会话登录到服务器的独特方式 - 有什么想法吗?
【讨论】:
【参考方案3】:Delphi XE 使用了更新版本的 SOAP,也许这就是答案:
https://forums.embarcadero.com/thread.jspa?messageID=200793
【讨论】:
以上是关于Delphi 7 SOAP 身份验证和会话 ID 如何的主要内容,如果未能解决你的问题,请参考以下文章
在 Kong 中启用基本身份验证和会话插件时如何获取用户 ID?