2012-03-16 144 views
3

我运行一个计算机实验室为年级学生(3-14哟),并希望创建一个由多个iframe组成的桌面/仪表板页面,每个页面指向不同的外部网站 (为此我们创建了个人帐户每个孩子);当一个孩子登录(到仪表板)时,脚本会将她登录到这些网站,所以她不必这样做。一次登录多个网站的脚本。尝试CURL和PHP。

我有1个服务器和20个工作站,我将它们分别称为“myserver”和“mybrowser”。所有这些都在相同的路由器(动态IP)之后。

一个孩子得到一个 'mybrowser' 的工作站上,激发了Firefox和运行desktop.php(在 'MYSERVER' 托管),并得到一个登录屏幕(为 'MYSERVER')

'mybrowser' --- http --->'myserver'

登录后,'myserver'将检索存储在其数据库中的一组用户名和密码,并运行CURL脚本将其发送到'外部Web服务器'。

'mybrowser' --- HTTP ---> 'MYSERVER' ---卷曲---> '外部Web服务器'

成功,好了,我想。 变成CURL,运行'myserver',登录'myserver'而不是'mybrowser'。 刷新后,iframe中的会话仍未登录。现在我知道了。

然后我想从'myserver'捕获cookie并将其设置为'mybrowser',以便'mybrowser'现在可以作为登录用户浏览(在iframe内) 。毕竟,我们(所有的“mybrowsers”)都与“myserver”位于相同的路由器后面,因此IP地址相同。

换句话说,我只需要'myserver'将用户同时登录到多个外部网站,并且一旦完成将控制权交还给个人用户的浏览器。

我希望答案不会诉诸于使用CURL来显示和控制整个会话的外部网站,除了会导致一些其他粘性问题的拖动。

由于安全问题,我得到了不允许的细微差别,但是如果所有'mybrowsers'和'myserver'都在同一个路由器后面呢?假设有一种方法可以将登录cookie从'myserver'复制到'mybrowsers','外部Web服务器'是否知道请求来自不同的机器?

可以这样做吗? 谢谢。

+1

你的各种服务使用哪些认证机制?基本认证或特定的登录页面?这让我觉得,正确的解决方案将需要每个浏览器的Javascript。 – Purpletoucan 2012-03-16 09:48:53

+0

如果您尝试使用从myserver启动的请求自己登录mybrowser工作站,则简短答案为“否”。漫长的回答是“是的,但它会需要这么多的麻烦,这是不值得花费的”。这是因为HTTP auth和cookie的范围仅限于一台主机,其缺点是您必须构建一个在myserver上运行的完整代理,或者在所有主机文件工作站 - 您需要简单地将myserver的身份标识为所有这些外部站点的工作站。 – DaveRandom 2012-03-16 10:06:05

回答

0

您面临的问题与cookie的安全原则有关。例如,您无法为其他网域设置Cookie,这意味着myserver无法为facebook.com设置Cookie。

你可以设置你的服务器运行一个HTTP代理,并使其通过你的服务器运行所有的查询并做一些URL转换(例如facebook.com => facebook.myserver),然后作为回报,你可以为客户端设置cookie(因为您在facebook.myserver上运行),然后翻译您从客户端收到的cookies并将它们提供给第三方网站。

非透明代理,你可以用开始的一个例子:http://www.phpmyproxy.com/

透明代理(在哪些URL保持“正确” /翻译)可能是值得考虑了。 Squid是一个非常受欢迎的。但是,不能说这很容易。

毕竟,您仍然需要为myserver构建一个本地脚本来处理登录过程,但至少有一个代理应该使这一切成为可能。

如果您在登录过程本身有任何发言权,可能会更容易将所有服务设置为使用OpenID或类似的登录服务,而StackOverflow及其姊妹站点是关于在多个站点上轻松登录的主要示例取得成就。