我公司的设置如下:
subdomain6.domain1.com
subdomain1.domain2.com
在每个网站上,请注意每个子域可以有一百个网站,用户可以登录。作为开发人员,我们必须在多个浏览器中测试前端,但只有在登录后的某个部分才需要进行某些工作
我编写了一个用户脚本,可以让我们保存用户名和密码(以及由于机密性而无法提及的其他详细信息)。脚本通过填写登录表单并单击“提交”按钮来检查用户帐户是否存在。如果没有,它会为我们注册 - 从而使注册过程自动化。
在同一个域的子域之间共享Cookie非常简单。如果我在subdomain1.domain1.com上,我可以保存一个可以通过subdomain2.domain1.com检索的cookie。但是,我还想为domain2保存这些。我似乎无法让这个工作。
我可以从这里看到两个解决方案 - 或者:
1)使用userscript附加iFrame,该用户脚本在domain2上加载站点。然后使用查询字符串来决定要设置什么,或者;
2)使用带有method =“POST”的表单,然后只发布到每个域上的文件中。
无论哪种方式都是资源密集型的,特别是如果cookie每次更改时都会更新。我们还有URL屏蔽功能。所以我们还必须考虑像abc.clientdomain1.com,abc.clientdomain2.com等网站。
有没有人知道更容易实现这一目标的方法?
答案 0 :(得分:11)
专门为您的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
等等。
答案 1 :(得分:8)
这个答案与我对“Set cookie on multiple domains with PHP or JavaScript”问题的回答略有不同。
做谷歌正在做的事情。创建 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>
然后在 body 标记上添加 onload 回调。只有当图像完全加载时才会加载文档,即在其他2个域上设置cookie时。 Onload回调:
<head>
<script>
function loadComplete(){
window.location="http://domain1.com";//URL of domain1
}
</script>
</head>
<body onload="loadComplete()">
现在,Cookie已在三个域上设置。
答案 2 :(得分:2)
出于安全原因,网站无法在其他域上设置或检索Cookie。通过javascript脚本提交表单可能是最容易做到的,并且仍然会在浏览器缓存中存储您需要的软件。
答案 3 :(得分:2)
包含来自domain2的脚本标记,该标记使用用户名和散列密码设置cookie:
<script type="text/javascript" src="http://domain2.com/cookie_login_page.php?username=johnsmith&hash=1614aasdfgh213g"></script>
然后,您可以检查以确保散列密码匹配(单向)。
关键点:
通过在散列字符串之前附加服务器将同意的时间戳(例如,16:00,16:10等),使URL中的哈希时间敏感。如果您使用的是HTTPS,这不是问题。
如果您的密码已经过哈希处理,假设两台服务器上的盐相同,那么对密码进行双重哈希就不会有什么坏处。
示例PHP代码:
的src:
<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
}
答案 4 :(得分:0)
正如其他人所说,您无法跨域访问Cookie。但是,如果您可以控制服务器代码,则可以在正文中返回信息,并允许客户端按服务器读取和存储该信息。
就我而言,我将单个客户端连接到多个服务器,并保持与每个服务器的经过身份验证的连接。我需要知道每个会话的会话何时到期,因此身份验证服务返回cookie,并且它修改响应的主体以发回相关数据,以便我可以读取该数据并设置我自己的cookie
通过这样做,我可以手动跟踪我需要的内容。在每种情况下都不会工作,但可能对像我这样的人来说。