2

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

例如:

当我在域 www.aabc.com 中设置会话并且我希望此会话也可以在域 www.ccc.com 中工作时——我单击 www.aabc.com 中的一个按钮并将标题更改为 www.ccc.com?

4

3 回答 3

3

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

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

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

于 2009-07-17T05:22:28.250 回答
3

我必须在上一份工作中设置这个。它的处理方式是通过一些挥手和半安全的哈希传递。

基本上,每个站点(站点 A 和站点 B)在每个域上都有相同的网关设置。网关接受 a user ID、 a timestamp、 aredirect URL和 a hash。由hasha shared key、 the timestamp、 the组成user ID

站点 A 生成散列并将上面列出的所有信息发送到站点 B 的网关。站点 B 然后对接收到的传递user ID和. timestampshared key

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

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

这里的关键点是:

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

希望这会有所帮助。

于 2009-07-17T05:52:00.830 回答
2

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

另一种选择是使用某种普通商店。如果他们可以访问同一个数据库,这可以是域 abc.com 存储记录的表,然后将记录的 id 传递给域 xyz.com。如果您尝试传递登录信息,这是一种更合适的方法。只需确保您混淆了 id,以便用户无法猜测另一个记录 id。

如果这两个域在不同的服务器上或不能访问同一个数据库,则公共存储方法的另一种方法是实现某种缓存存储服务,该服务将存储一段时间的信息并且两个域都可以访问。域 abc.com 传入一些数据,服务将域 abc.com 发送到域 xyz.com 的 ID 传回,然后返回到请求数据的服务。同样,如果您自己开发此服务,请确保您混淆了 ID。

于 2009-07-17T05:51:51.640 回答