【问题标题】:cookie not being sent when requesting JS请求JS时没有发送cookie
【发布时间】:2011-05-18 21:18:53
【问题描述】:

问题originally posted on Webmasters,建议移到这里。

我托管一个网络服务,并为我的成员提供一个 Javascript 书签,它从我的服务器加载一个 JS 脚本。但是,客户端必须登录才能接收 JS 脚本。这几乎适用于所有人。但是,一些用户在已知可以为其他人工作的设置(即浏览器/操作系统)上遇到以下问题:当他们通过 javascript 书签从我的服务器请求脚本时,他们的 cookie 来自我的服务器不包含在请求中,因此它们始终“未经过身份验证”。

我通过以下方式提出请求:

var myScript = eltCreate('script');
myScript.setAttribute('src','http://myserver.com/script');
document.body.appendChild(myScript);

在困惑的绝望中,我将脚本页面更改为简单地输出“我的 cookie 有 [x] 个元素”,其中 [x] 是 count($_COOKIE) on http://myserver.example.com。如果该用户子集使用上述小书签中编码的方法请求脚本,则消息显示“我的 cookie 有 0 个元素”。当他们直接在浏览器中访问 URL 时,消息显示“我的 cookie 有 7 个元素”。

到底发生了什么?!更重要的是,我将如何解决这个问题?

【问题讨论】:

    标签: javascript cookies bookmarklet


    【解决方案1】:

    我很确定这是一个隐私设置问题。受影响的浏览器可能增加了隐私设置,拒绝 3rd 方脚本设置 cookie。

    我在域 A 上托管的站点上放置指向域 B 的 IFRAME 时遇到了类似的问题。一些浏览器拒绝我的 IFRAME 为 它自己的域设置 cookie,因为它触发了隐私问题.

    您可能希望在脚本的 src 属性中存储一个哈希,并让它以这种方式对用户进行身份验证。

    编辑:这就是我所说的:Setting cross-domain cookies in Safari

    【讨论】:

    • 我关心的不是 cookie 的设置(尽管我想这也很重要),但更多的是读取数据,需要将 cookie 与请求一起发送。这仍然适用吗?
    • 我会尝试在 src 部分偷偷添加一个哈希,然后告诉你它是怎么回事
    • 老实说,这是一个很好的问题,但请这样想。假设访问者访问了您的站点(域 A)并且您设置了一个 cookie 来识别他。如果您将脚本放在访问您的站点的另一个站点(域 B)上,如果请求通过了 cookie,那么您可以使用 HTTP Referrer 标头跟踪用户访问了域 B。所以从这个意义上说,这是对隐私的侵犯,我相信你也面临着和我一样的问题。
    • 我真的很高兴我找到了这个主题,因为我也在开发一个使用 Bookmarklet 的应用程序,我从来没有遇到过这个问题,因为我在 Bookmarklet 中存储了一个唯一的哈希值,但是我如果出现这种情况,一定会记住这一点。
    猜你喜欢
    • 2020-08-19
    • 2020-02-08
    • 2014-12-14
    • 2021-05-29
    • 1970-01-01
    • 2012-10-08
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多