从同一台服务器设置不同域的会话?

时间:2009-07-17 05:13:30

标签: cookies cross-domain

有谁知道我是否可以为当前域设置会话值,并将此会话用于其他域?

例如:

当我在域名www.aabc.com中设置会话时,我希望此会话也可以在www.ccc.com域中运行 - 我点击www.aabc.com上的按钮并将标题更改为www.ccc .COM?

3 个答案:

答案 0 :(得分:3)

我不得不在上一份工作中做好准备。它的处理方式是通过一些挥手和半安全的哈希传递。

基本上,每个站点,站点A和站点B在每个域上都具有相同的网关设置。网关接受user IDtimestampredirect URLhashhashshared keytimestampuser ID组成。

站点A生成哈希,并将上面列出的所有信息发送到站点B的网关。然后,站点B将收到的已通过的user IDtimestampshared key进行哈希处理。

如果生成的哈希与收到的哈希匹配,则网关将用户登录并从共享内存表或memcached池加载其会话,并将用户重定向到收到的redirect url

最后,timestamp用于确定提供的传递hash的到期时间(例如:哈希仅在x时间内有效)。大约2.5分钟的东西就是我们用于TTL的东西(考虑到网络延迟,或者刷新一两次)。

这里的关键点是:

  • 拥有可以序列化会话的共享资源
  • 使用共享密钥创建和确认哈希值(如果您要使用md5,请执行多次传递)
  • 只允许哈希在很短但合理的时间内有效。
  • 这需要控制两个域。

希望这很有用。

答案 1 :(得分:2)

您只能为您的域(以及域名中的其他网站,如子域名,如果我没记错的话)设置Cookie。

这是(主要是?)出于安全原因:否则,任何人都可以为任何网站设置cookie ...我让你想象一下这个烂摊子^^

(为另一个域设置cookie的唯一方法似乎是利用浏览器的安全漏洞 - 例如,请参阅http://en.wikipedia.org/wiki/Cross-site_cooking;因此,在正常情况下,不可能 - 很高兴)

答案 2 :(得分:2)

您无法直接访问这两个域会话,但是,有合法的解决方案可以在您控制的两个站点之间传递会话数据。对于可以被篡改的数据,您只需在域abc.com上有一个页面,在xyz.com上加载1px xpp的“图像”,并在查询字符串中传递相应的数据。这是非常不安全的,所以要确保用户不会通过篡改来破坏任何东西。

另一种选择是使用某种常见的商店。如果他们可以访问同一个数据库,则可以是域abc.com存储记录的表,然后将记录的id传递给域xyz.com。如果您尝试传递登录信息,这是一种更合适的方法。只需确保您对ID进行模糊处理,以便用户无法猜出另一个记录ID。

如果这两个域位于不同的服务器上或无法访问同一个数据库,那么公共存储方法的另一种方法是实现某种缓存存储服务,该服务将存储信息一段时间并且可由两个域访问。域abc.com传入一些数据,服务传回域abc.com发送到域xyz.com的ID,然后域xyz.com返回到请求数据的服务。同样,如果您自己开发此服务,请确保对这些ID进行模糊处理。