【发布时间】:2010-11-11 14:33:17
【问题描述】:
有谁知道我是否可以为当前域设置会话值,并将此会话用于另一个域?
例如:
当我在域 www.aabc.com 中设置会话并且我希望此会话也可以在域 www.ccc.com 中工作时——我单击 www.aabc.com 中的一个按钮并将标题更改为 www.ccc .com?
【问题讨论】:
标签: cookies cross-domain
有谁知道我是否可以为当前域设置会话值,并将此会话用于另一个域?
例如:
当我在域 www.aabc.com 中设置会话并且我希望此会话也可以在域 www.ccc.com 中工作时——我单击 www.aabc.com 中的一个按钮并将标题更改为 www.ccc .com?
【问题讨论】:
标签: cookies cross-domain
我必须在上一份工作中进行设置。它的处理方式是通过一些挥手和半安全的哈希传递。
基本上,每个站点(站点 A 和站点 B)在每个域上都有相同的网关设置。网关接受user ID、timestamp、redirect URL 和hash。 hash 由 shared key、timestamp、user ID 组成。
站点 A 生成哈希并将上面列出的所有信息发送到站点 B 的网关。然后站点 B 使用 shared key 对接收到的 user ID 和 timestamp 进行哈希处理。
如果生成的哈希与接收的哈希匹配,则网关将用户登录并从共享内存表或 memcached 池加载他们的会话,并将用户重定向到接收的redirect url。
最后,timestamp 用于确定提供的传递的hash 的到期时间(例如:哈希仅对x 时间有效)。我们为 TTL 使用的时间大约是 2.5 分钟(考虑到网络延迟,可能还有一两次刷新)。
这里的重点是:
希望对您有所帮助。
【讨论】:
您不能直接访问两个域会话,但是,有一些合法的解决方案可以在您控制的两个站点之间传递会话数据。对于可能被篡改的数据,您可以简单地让域 abc.com 上的页面在 xyz.com 上加载 1px x 1px “图像”,并在查询字符串中传递适当的数据。这是非常不安全的,因此请确保用户不会通过篡改来破坏任何东西。
另一种选择是使用某种公共商店。如果他们可以访问同一个数据库,这可以是域 abc.com 存储记录的表,然后将记录的 id 传递给域 xyz.com。如果您尝试传递登录信息,这是一种更合适的方法。只需确保您混淆了 id,这样用户就无法猜测另一个记录 id。
如果这两个域位于不同的服务器上或无法访问相同的数据库,则另一种通用存储方法的方法是实现某种缓存存储服务,该服务将存储一段时间的信息并且两个域都可以访问。域 abc.com 传入一些数据,并且服务将域 abc.com 发送到域 xyz.com 的 ID 传回,然后返回到请求数据的服务。同样,如果您自己开发此服务,请确保混淆 ID。
【讨论】:
您只能为您的域(以及您域上的其他站点,如子域,如果我没记错的话)设置 cookie。
这是(主要是?)出于安全原因:否则,任何人都可以为任何网站设置 cookie...我让你想象一下混乱 ^^
(为另一个域设置 cookie 的唯一方法似乎是利用浏览器的安全漏洞 - 参见 http://en.wikipedia.org/wiki/Cross-site_cooking 例如;因此,在正常情况下,这是不可能的 - 很高兴)
【讨论】: