发送HTTP请求是否可以不使用cookies?

5
我需要将一些私有数据从服务器发送到浏览器。我想将其存储在cookie中,并在JavaScript代码中稍后使用此数据。但是,当浏览器进行HTTP请求时,我不希望发送此私有数据到服务器(因为安全性)。 我知道可以在cookie中设置“路径”值(例如某个抽象路径),但是这样我将无法读取此cookie(我将能够从此抽象路径中读取,但如果这样做,浏览器会将此cookie发送到服务器一次 - 但正如我所说,不能将此数据发送到服务器)。
因此,我的问题是:是否有可能不发送带有HTTP请求的cookie?
3个回答

3
如果你从服务器发送私人数据到浏览器,那么它已经被暴露了。我认为它被包含在后续请求中并不重要。总的来说,你应该永远不要将私人数据放入cookie中,除非加密。所以要么a)在https上完成所有操作,要么b)对数据进行加密。但我猜想b)会成为问题,因为你需要在客户端解密。老实说,听起来你需要重新考虑你的策略。

谢谢回答。 当然,它将是SSL,并且我知道我可以额外加密数据。 但通常我不想将其发送到服务器。你看,我正在编写一个移动网页。这些私人数据必须在用户登录后某种方式传输到设备上。 收到后,它将用于一些未来的操作。在未来的登录中,不需要再次接收它,但数据必须对浏览器可用。它不必以这种方式开发,但如何将一些私人数据传输到设备(iPhone、Android等),以在移动网页上使用...? - Buffalo
@Buffalo:目前浏览器并不真正支持客户端数据缓存,这就是 cookie 存在的原因。实际上,应该将所有客户端数据和状态保留在服务器端,并根据给定用户呈现适当的页面。 - Richard H

0

正如Richard H所说,如果用户知道在哪里查找,cookie中的数据是可见的。因此,这不是存储机密信息的好地方。

话虽如此,我曾经遇到过一个需要在客户端存储大量数据的应用程序,并遇到了相同的问题。(在我的应用中,我需要使应用程序能够离线运行,并在PC崩溃或网站宕机时保留用户操作。)解决方案非常简单:

1)将cookie数据存储在JavaScript变量中(或已经在变量中维护)。

2)删除cookies。下面是可以清除cookie的函数:

function cookieErase (name) {
  document.cookie = name+'=; Max-Age=-99999999;path=/';
}

如果您有多个 cookie(正如我的情况),则必须为每个已存储的 cookie 运行上述函数。有代码可迭代每个 cookie,但在实践中,您可能已经知道大 cookie 的名称,并且可能不想删除其他网站所依赖的 cookie。
3)按照通常的方式发送请求。
4)从保存的变量中还原 cookie 数据。
以下是您可以使用的一些优化:
1)仅在状态码为 400 的坏请求(如果 cookie 数据太大,则会返回此状态码)时触发此代码。有时,您的数据并不是太大,因此删除是不必要的。
2)如果不需要立即使用,则在超时后还原 cookie 数据。通过这种方式,您可以进行多个请求,并且只有在空闲时间时才还原数据。这意味着您的用户在积极使用您的网站时可以获得快速的体验。
3)一旦可以,请尝试将任何数据移到服务器端,以便减轻客户端/通信的负担。在我的案例中,一旦连接恢复,所有操作都会尽快同步。

如何在不使用任何 cookie 并且不删除它的情况下发出请求。 - nim
1
我认为这是不可能的。据我所知,浏览器会将所有的cookie附加到每个请求上,即使这导致请求失败。如果你保存cookie数据,删除cookie,然后再恢复它,效果是一样的。 - azoundria

0

我认为如果cookie对该请求仍然有效,你无法强制浏览器不重新发送它。

也许更好的方法是在JS中读取完cookie中的数据后将其删除:

http://techpatterns.com/downloads/javascript_cookies.php

如果您需要在下一次响应中再次将其返回到JS中,只需让服务器重新发送它,并在客户端上再次删除它即可。
我应该说,以这种方式发送您认为是“私有”的数据似乎并不完全适当 - 因为使用浏览器和服务器之间的某种代理很容易查看此信息。

这些私人数据只能发送一次给浏览器,因此必须存储在浏览器缓存/cookie中。 - Buffalo
你可以使用类似 http://gears.google.com/ 的工具来存储所需的信息吗? - rvxnet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接