2011-12-06 49 views
9

我公司拥有一支设置如下:饼干 - 设置跨多个域

  • subdomain1.domain1.com
  • subdomain2.domain1.com
  • subdomain3.domain1.com
  • subdomain4.domain1 .COM
  • subdomain5.domain1.com
  • subdomain6.domain1.com

  • subdomain1.domain2.com

  • subdomain2.domain2.com
  • subdomain3.domain2.com
  • subdomain4.domain2.com
  • subdomain5.domain2.com
  • subdomain6.domain2.com

在每个站点上,记住每个子站点可以有一百个站点,用户可以登录。作为开发人员,我们必须跨几个浏览器测试前端,但有些只有在登录后才需要工作。

我写了一个userscript,它使我们能够保存用户名和密码(以及其他我不能提及的细节,因为机密性)。该脚本检查是否存在通过登录表单填写,并点击提交按钮的用户帐户。如果不是,它注册为我们 - 从而自动注册过程。

在同一个域上的子域之间共享cookie很容易。如果我在subdomain1.domain1.com我能救它可以通过subdomain2.domain1.com检索的cookie。不过,我也想将这些保存为domain2。我似乎无法得到这个工作。

我可以从这里看到两种解决方案 - 无论是:

1)连接使用userscript,它加载一个网站上DOMAIN2的iFrame。这然后使用查询字符串来决定如何设置什么,或;

2)使用method =“POST”的表单,并简单地发布到每个域上的文件。

无论哪种方式都是资源密集型的,特别是如果cookie每次更新时都更新。我们也有URL掩盖。所以我们也必须考虑像abc.clientdomain1.com,abc.clientdomain2.com等网站。

有谁知道一个更简单的方法来做到这一点?

回答

9

为您的cookie创建一个通用域,并将其用作getter/setter API。

http://cookie.domain.com/set/domain1 
http://cookie.domain.com/get/domain1 

http://cookie.domain.com/set/domain2 
http://cookie.domain.com/get/domain2 

等等。

+0

这听起来像它会这样做 - 不知道是否要这样做,或者如果表单更容易实现,基于我打算在一周内完成。 – ClarkeyBoy

1

出于安全考虑,网站不能设置或获取其他域的Cookie。编写脚本的形式通过javascript提交很可能是最容易做的,仍然会存储在浏览器缓存需要cooikes。

+0

不幸的是,这是我所担心的;这将会是很多工作,但我认为这将是非常有益的。在我接受这个答案之前,我会拭目以待其他人是否找到了一个更简单的方法来做到这一点。 – ClarkeyBoy

2

包括来自DOMAIN2的脚本标签,设置使用用户名和哈希密码饼干:

<script type="text/javascript" src="http://domain2.com/cookie_login_page.php?username=johnsmith&hash=1614aasdfgh213g"></script> 

就可以检查,以确保散列密码匹配(单程)。

要点:

  1. 制作的URL时通过散列之前由服务器附加将另行商定时间戳(例如,16:00,16:10,等)敏感的散列字符串。如果您使用的是HTTPS,那么这不是一个问题。

  2. 如果您的密码已被散列,那么假设盐分在两台服务器上都是相同的,那么双密码就不会受到伤害。

示例PHP代码:

源:

<script type="text/javascript" src="/cookie_login_page.php?username=<?php echo $username; ?>&hash=<?php echo md5($password . date('H')); ?>"></script> 

DEST:

<?php 

$password = get_password($_GET['username']); 
if($_GET['hash'] == md5($password . date('H')) { 
    // set the cookie 
} 
5

这个答案是一个稍微不同的版本,我对这个问题 “Set cookie on multiple domains with PHP or JavaScript” 的答案。

做Google做的事情。创建一个PHP(或任何其他服务器语言文件)文件,该文件在所有3个域上设置cookie。然后在要设置登录名的域上创建一个HTML文件,该文件将加载在其他2个域上设置Cookie的PHP文件。例如:

<html> 
<head></head> 
<body> 
Please wait.......... 
<img src="http://domain2.com/setcookie.php?user=encryptedusername"/> 
<img src="http://domain3.com/setcookie.php?user=encryptedusername"/> 
</body> 
</html> 

然后在标签添加的onload回调。该文档只会在图像完全加载时加载,即在另外两个域上设置cookie时加载。的onload回调:

<head> 
<script> 
function loadComplete(){ 
    window.location="http://domain1.com";//URL of domain1 
} 
</script> 
</head> 
<body onload="loadComplete()"> 

现在Cookie是在域设置。

Source

+0

我如何发现Google正在做这件事? – chanchal118

+0

@ chanchal118登录到Google帐户后,使用开发人员工具检查网页 – Subin

0

如前所述别人,你不能跨域访问的cookie。但是,如果您控制了服务器代码,则可以在主体中返回信息,并允许客户端读取并存储每个服务器的信息。

在我的情况下,我将一个客户端连接到多个服务器,并保持每个服务器的认证连接。我需要知道每个会话何时会到期,因此身份验证服务会返回cookie,并且会修改响应的主体以将相关数据发回,以便我可以读取该数据并设置自己的Cookie 。

通过这样做,我可以手动跟踪我需要什么。在任何情况下都行不通,但对于像我这样的人可能会有效。