我已经建立了一个网站(A),它可以从单独的Web服务登录并检索客户数据。
拥有(A)的组织也有一个网站(B),其中包含一个网络表单。他们希望(A)上的登录客户能够点击(B)并查看预先填充的表格及其详细信息。
这意味着(A)必须将他们的客户ID写入cookie,(B)可以读取,然后(B)可以从Web服务请求数据,并预先填充表单。
这提出了两个问题:
网站(B)可以阅读网站(A)的cookie吗?
如果是这样,为了防止有人编辑cookie并在表单中查看其他人的数据,我需要做一些事情,比如加密(A)上的cookie,然后在(B)中解密 - 任何沿着这条线的建议?
我无法将现有登录更改为OAuth或其他内容,因为Web服务已被其他几个网站使用,因此无法更改。
答案 0 :(得分:19)
没有。网站B无法从网站A读取cookie。
最简单的解决方法是将登录/凭据信息从网站A传递到网站B,并让网站B设置单独的cookie。例如,登录到网站A后,您可以使用加密的查询字符串快速将其重定向到网站B.然后,网站B可以读取信息,设置自己的cookie,并将用户重定向回站点A.
这很麻烦但可能。
答案 1 :(得分:15)
您提到同一家公司拥有这两个网站。如您所料,如果网站具有相同的域名,如www.mycompany.com和store.mycompany.com,那么他们可以共享Cookie。 HTTP响应头看起来像这样:
Set-Cookie: user_id=1295214458; Path=/; Domain=.mycompany.com
由于客户端可以直接访问此数据,因此您还应该包含签名,以便检测到篡改。通常整个事情都被加密并签名为“令牌”,并将其设置为cookie。但从技术上讲,只需签名即可。
答案 2 :(得分:6)
如果在您的情况下,您的所有用户都使用支持HTML5的浏览器,则可以使用window.postMessage
方法,一方允许addEventListener
,另一方另一方postMessage
。这是一篇很好的文章/示例:https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage。
然后步骤很简单:
答案 3 :(得分:2)
Cookie只能由他们设置的单个域访问。
我相信如果您在同一个域上使用两个子域,则可以共享cookie,但浏览器不会将在一个域上设置的cookie发送给任何其他域。
编辑:您还希望避免在Cookie中存储大量数据。您是否有可能创建一个网站B可以使用javascript查询的API?
答案 4 :(得分:0)
互联网上有开源工具可以做到这一点,但这违背了Cookie理念背后的全部理念。 Cookie只能由一个域访问。但是,你可以在浏览器中模拟该域名和“Hack”。不建议这样做,有些浏览器的安全性更高,不允许这样做。
我建议您在网站A中创建一个Web服务,并提供对B的阅读权限以便阅读它。
答案 5 :(得分:0)
潜在的解决方法:您可以在辅助站点上使用内联框架来显示主站点的内容(占用整个窗口):
<!DOCTYPE HTML>
<html>
<head>
<title>your page title</title>
<style type="text/css">
body, html {
margin: 0; padding: 0; height: 100%; overflow: hidden;
}
#content {
position:absolute; left: 0; right: 0; bottom: 0; top: 0px;
}
</style>
</head>
<body>
<div id="content">
<iframe width="100%" height="100%" frameborder="0" src="http://yourMainSite.com/dataDependentPage.php" ></iframe>
TESTING
</div>
</body>
</html>
答案 6 :(得分:0)