跨域cookie访问(或会话)

mtr*_*nda 11 asp.net cookies subdomain cross-domain

虽然我意识到这通常与跨站点脚本攻击有关,但我想知道的是,会话如何在属于单个域的多个子域中保持有效(例如:用户只登录一次,并且能够访问两者subdomain1.domain.com和subdomain2.domain.com具有相同的会话).我想我首先需要了解它是如何工作的,但到目前为止我还没有找到任何相关的东西.

但话说回来,也许我没有问正确的问题.

提前致谢 :)

小智 18

Inproc会话无法保持有效,但您可以编写Web应用程序代码以允许跨多个子域的Cookie.您需要将域设置为:

Response.Cookies("CookieName").Domain = ".mydomain.com"
Run Code Online (Sandbox Code Playgroud)

记住这个时期.

  • 标题说明了但是如果你读了他的要求,他就明确地说了子域名. (17认同)
  • @aleemb当然,我确实说过子域名. (5认同)

ale*_*emb 6

有很多方法可以跨域共享会话数据或cookie数据.最简单的方法是通过共享数据存储在服务器端共享它.但你不会问这个问题是否那么简单.

另一种方法是同样简单.该域one.com包含一些会话数据name=aleem,id=123并且希望将其传递给two.com.它将遵循以下步骤:

  1. 拨打电话 two.com/api/?name=aleem&id=123
  2. two.com通过查询参数得到的数据,创建一个与数据的cookie.此cookie将存储在two.com域下.
  3. two.com然后将重定向回到REFERER在这种情况下恰好是one.com

这是一个简化的方案.域two.com需要能够信任one.com,不仅如此,而且需要知道请求是真实的,而不仅仅是由用户制作,因此您需要使用公钥/私钥来缓解这种情况.


For*_*ega 0

您可以为特定域设置 cookie。

在php中,setCookie()方法包含一个参数,可以在其中指定顶级域,因此cookie对所有子域都有效。根据您的标签,我发现您正在使用 asp.net。也许这也存在于asp...

稍微搜索一下 asp 后:

尝试这个:

Response.Cookies("CookieName").Domain = ".mydomain.com"
Run Code Online (Sandbox Code Playgroud)

或阅读此内容

  • 当然,无论演示使用什么语言,任何证明问题的基本要求是可能的答案都是有价值的。你至少知道你应该继续走你现在走的路。;) (4认同)