用户从我们的网站注销后,我们需要向2-3个其他外部网址发出一些HTTP请求(我们不需要这些btw的响应)。
必须在客户端上执行url请求,因为请求将导致在用户当前会话上对这些外部站点执行注销。
我认为可以实现的唯一方法是渲染一些不可见的iframe,并为每个iframe设置url,以便在页面加载时执行请求。
还有另一种方法可以实现吗?上面的解决方案看起来有点笨拙。
编辑:我不能使用JS,因为我们需要符合标准。
答案 0 :(得分:1)
为了完成服务器端,服务器需要能够将自己标识为外部站点的用户。访问外部站点时,通常会通过cookie识别用户,这意味着服务器需要此cookie才能正确识别自身。
不幸的是(对于您来说,幸运的是全世界的网络安全)网站无法从其他网站的cookie中获取数据。因此无法以这种方式识别自己。
网站可以采用其他方式识别访问。一个例子可能是ASP.NET中的cookieless会话,它使用url中的唯一键(我相信),或者如果在服务器之间设置了某种信任,则可以通过安全可信通信进行身份验证。但是,这些可能仍不足以使用户退出。例如,在后一种情况下,服务器可能能够识别外部站点的给定用户,但外部站点仍需要实现代码才能注销所有会话,因为服务器连接将位于与用户连接不同的会话中
这使我们不得不在客户端做事。 Javascript是这个的合理解决方案。您需要将一个javascript函数链接到您的“注销”按钮,并使用该函数将请求发送到外部服务器,然后再实际访问您的ASP.NET页面以退出您的站点。您可以通过使用外部站点注销页面打开新窗口(具有用户知道他们已从其他站点注销的优势)或直接通过javascript执行请求来执行此操作。
这个问题可以帮助你解决javscript请求:HTTP GET request in JavaScript?
如果在这种情况下不允许使用javascript,则必须使用另一种方法来调用远程服务器。有一些选项可供选择,其中包括你对iframe的建议,如果需要的话,它们可以显示优势(例如用户想要注销的视觉确认),但可能比你需要的多一点(因为你不需要)需要将所有HTML加载到dom等)。另一种选择是(ab)使用图像标签。将注销URL作为图像源,它将关闭并获取它。什么回来将不是一个有效的图像,所以你只会得到一个破碎的图像标签。这当然可以通过各种方式隐藏起来。
可能还有其他一些我没想过会对此有用的标签(想法包括一个标签虽然可能有用,但可能没有,可能还有其他标签我没有想过)。如果你想要别人,你必须进行实验。
就我个人而言,我可能会坚持使用iframe但在你的退出屏幕上显示它们(可能有javascript隐藏它们并显示一个按钮来显示它们)。
答案 1 :(得分:0)
为什么不在退出之前从服务器发送这些请求?在那里,您可以从客户端获得所有必要的上下文信息(如身份验证cookie等),这些信息可以在执行请求时委派给远程站点。如果您不关心响应,可以在单独的线程中触发这些请求,以避免阻塞客户端。
答案 2 :(得分:0)