【问题标题】:How to make a cookieless ajax request?如何发出无cookie的ajax请求?
【发布时间】:2013-09-03 08:09:21
【问题描述】:

是否可以使用 javascript 显式发出无 cookie 请求?我知道您不能发出“模拟”cookie 的请求(即,除非有一个具有该值的实际 cookie 设置,否则无法将数据作为 cookie 值提交),但这似乎在安全方面更可接受。

【问题讨论】:

  • 重复:stackoverflow.com/questions/9186815/…(但答案似乎是:你不能)。
  • @Thilo 只是一个 IMO:我认为这不是重复的,因为我不是试图抑制单个 cookie,而是所有它们。抑制一个(或更改任何一个)可能被视为“篡改”,而执行无 cookie 请求不太可能有恶意应用程序。

标签: javascript jquery cookies


【解决方案1】:

我看到的选择是:

  1. 您可以在发出 ajax 请求之前清除所有客户端控制的 cookie(这不会仅清除服务器端的 cookie)。
  2. 您可以向 ajax 请求添加一个参数,指示服务器忽略该特定请求的任何 cookie 值。
  3. 您可以进行设置,使 ajax 请求发送到无法访问感兴趣的 cookie 的服务器或路径,这样它们就不会随该请求一起发送。
  4. 如果它是一个特定的 cookie 值并且该值是由客户端控制的,那么您可以保存该 cookie 值,清除它,发送 ajax 请求,然后再次恢复该 cookie 值。实际上,我想您可以对所有 cookie 值执行此操作,但只使用几个值会更简单。

【讨论】:

  • 在 (2) 中,您是在谈论对服务器的“功能性”指令(即设置一些代码/服务器处理以忽略带有 ?ignorecookies=true 等的 cookie),还是发送的 HTTP 协议指令作为标题?
  • @o.v. - 类似于?ignorecookies=true,在应用程序级别完成。
  • 最终得到了 (3) 的变体 - 设置 F5 规则以从某些请求中删除 cookie,干杯
【解决方案2】:

正如对该问题的评论中提到的,这是不可能的,您无法控制浏览器的这方面。我能想到的唯一方法是将cookie的PATH设置为域中的特定目录(例如host.domain.com/myApp),然后将ajax请求设置为非子目录您为 cookie 设置的 PATH 的目录(例如 host.domain.com/ajaxDirectory)。

减少请求大小的常见做法是将资源放在不同的子域上。这种方式不会发送大多数 cookie,但显然这不是 AJAX 的选项(除非您使用 JSONP)。

【讨论】:

    【解决方案3】:

    这似乎在安全方面更容易接受

    只需忽略服务器端未使用的cookie,或先向注销服务发出请求。另一种选择是对你的服务器进行编码,这样你就可以覆盖 cookie 中的数据,比如 post body 或 request header 中的表单编码数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多