【问题标题】:Reading a cookie from another web site从另一个网站读取 cookie
【发布时间】:2018-01-16 23:43:28
【问题描述】:

我当前的客户使用 2 个单独的网站

  1. 门户网站
  2. 预订网站

从门户调用预订网站,并在预订完成后重定向回门户。

但预订网站也独立存在,并由另一方管理。为此,我们无法更改任何内容。

门户网站和预订网站都可以自定义,互不影响。这是“按设计”完成的,但目前我们面临语言设置的问题:预订网站的语言设置应用于门户。

此时在门户中通过读取 cookie 设置语言:

HttpCookie cookie = Request.Cookies["LanguageCookie"];

预订网站同时使用 2 个 cookie:

  1. 当前位置
  2. 当前语言

预订网站在门户网站的子域上运行。

我一直在阅读,就我而言,我应该能够像这样读取这些 cookie:

HttpCookie cookie1 = Request.Cookies["currentPOS"];
HttpCookie cookie2 = Request.Cookies["currentLANG"];

这不起作用,但话又说回来,在其他页面上,他们开始设置 cookie 的 .Domain 属性。

所以我的问题是,我该如何解决这个问题?

【问题讨论】:

标签: asp.net cookies


【解决方案1】:

虽然可以实施直接解决方案,但我的建议是避免尝试从其他站点读取 cookie。假设在某个时候,出于某种原因(例如业务原因),这两个应用程序不会共享顶级域,而是会在不相关的域上运行?然后呢?

一个简单的解决方案是反转信息流。假设您有站点 A 和站点 B 并且 A 设置了 B 想要读取的信息。

您当前的方法是能够读取 A 设置的 B cookie。

简单的解决方案是相反的流程,A将信息设置在B中。从技术上讲,它可以使用单个动态元素来实现,在 A 中呈现,调用 B,例如像素图像

<!-- http://a.com/index.html -->
...
    <img src="http://b.com/setParams?currentLang=en />

在 B 中呈现时,此像素会设置 B 的 cookie,因此根本没有跨域 cookie。相反,信息是通过直接跨域调用传递的(这就是为什么经常使用图像,因为它不受限制),并且 cookie 仅用于在被调用方存储此信息。

因为它是一个图像元素,只要确保它不会改变 A 处的页面布局即可。

这种技术通常用于跨域跟踪信息,由于此类图像的内容没有意义,它们通常被渲染为 1x1(一个像素)透明图像(这就是名称 pixel来自)。

【讨论】:

  • 问题是我无权访问第二个站点,所以我唯一的选择是实际使用其他站点创建的 cookie。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多