为来自同一服务器的不同域设置会话?

问题描述:

有谁知道我是否可以为当前域设置会话值,并将此会话用于其他域?为来自同一服务器的不同域设置会话?

例如:

,当我在域www.aabc.com集会议,并预祝本次会议领域www.ccc.com工作,以及 - 我在www.aabc.com点击一个按钮并将标题更改为www.ccc.com?

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

这是(主要是?)出于安全原因:意外,任何人都可以对任何网站设置cookies ......我让你想象的混乱^^

(用户设置Cookie的另一个域的唯一方法似乎通过利用浏览器的安全漏洞 - 例如http://en.wikipedia.org/wiki/Cross-site_cooking;因此,在正常情况下,不可能 - 愉快地)

+0

对不起,我的问题是设置会话的差异域... – 2009-07-17 05:24:29

您不能直接访问两个域会话,但是,有两个站点之间传递会话数据的合法解决方案你控制。对于可能被篡改的数据,只需在域abc.com上放置一个页面,即可在xyz.com上加载1px x 1px“image”,并在查询字符串中传递适当的数据。这是非常不安全的,所以请确保用户不会因篡改而破坏任何内容。

另一种选择是使用某种通用存储。如果他们有权访问相同的数据库,则可以是域abc.com存储记录的表,然后将该记录的id传递到域xyz.com。如果您尝试传递登录信息,这是更合适的方法。只要确保你混淆了ID,这样用户就无法猜测另一个记录ID。

如果这两个域位于不同的服务器上或无法访问同一个数据库,则使用公用存储方法的另一种方法是实现某种缓存存储服务,该服务将一段时间存储信息并且可由两个域访问。域abc.com传递一些数据,并且服务将域abc.com发送到域xyz.com的标识传递回服务请求数据。同样,如果您自己开发此服务,请确保您混淆了ID。

我不得不在我上一份工作上做这件事。它的处理方式是通过一些挥手和半安全的散列传递。

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

站点A生成哈希,并将上面列出的所有信息发送到站点B的网关。站点B然后将收到的传递user IDtimestampshared key哈希。

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

最后,timestamp用于确定所提供的传递的hash的过期时间(例如:散列仅对x时间有效)。 2.5分钟左右的时间就是我们用于TTL的时间(考虑到网络滞后,也许是一两次刷新)。

这里的关键点是:

  • 具有共享资源,其中会话可序列化
  • 使用共享密钥来创建并确认散列(如果你要使用MD5,做多遍)
  • 只允许哈希在一小段但合理的时间内有效。
  • 这需要控制这两个域。

希望有帮助。