【问题标题】:Is it possible to send HTTP Request without cookies?是否可以在没有 cookie 的情况下发送 HTTP 请求?
【发布时间】:2018-10-18 08:42:21
【问题描述】:

我必须从服务器向浏览器发送一次私人数据。我想把它存储在 cookie 中。此数据稍后将在 Javascript 代码中使用。但是当浏览器执行 HTTP 请求时(出于安全考虑),我想从不(!)将此私有数据发送到服务器。 我知道我可以在 cookie 中设置“路径”值(即一些抽象路径)但是我将无法读取这个 cookie(我将能够从这个抽象路径中读取,但如果是这样,浏览器将此 cookie 发送到服务器一次 - 但正如我所说,此数据无法发送到服务器)。

所以,我的问题是:是否可以不使用 HTTP 请求发送 cookie?

【问题讨论】:

    标签: http cookies


    【解决方案1】:

    如果您将此私人数据从服务器发送到浏览器,那么无论如何它都会被公开。我认为将其包含在后续请求中并不重要。

    一般情况下,您应该永远不要将私人数据放入 cookie 中,至少除非加密,否则不要这样做。因此,要么 a) 通过 https 执行所有这些操作,要么 b) 加密数据。但我猜测 b) 将是一个问题,因为您必须在客户端解密。

    老实说,这听起来你需要重新考虑你的策略。

    【讨论】:

    • 感谢您的回答。当然它会是 SSL,我知道我可以额外加密数据。但通常我从不想将它发送到服务器。你看,我正在编写一个移动网页。此私人数据必须以某种方式传输到设备(在用户登录后)。收到后,将用于以后的一些操作。以后登录时无需再次接收,但数据必须可供浏览器使用。不一定要这样开发,但是如何将一些私有数据传输到设备(iPhone、Android等),在移动网页上使用...?
    • @Buffalo:目前浏览器并不真正支持客户端缓存数据,这不是 cookie 的用途。实际上,您的所有客户端数据和状态都应该保存在服务器端,服务器会为给定用户适当地呈现页面。
    【解决方案2】:

    如果 cookie 对该请求有效,我认为您不能强制浏览器不重新发送 cookie。

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

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

    如果您需要在下次响应时再次将其返回到 JS 中,只需让服务器重新发送它,然后在客户端再次将其删除。

    我应该说,以这种方式发送您认为是“私人”的数据从表面上看似乎并不完全合适 - 因为可以使用位于浏览器和浏览器之间的某种类型的代理轻松查看这些信息服务器。

    【讨论】:

    • 这个私有数据只能发送到浏览器一次,所以它必须存储在浏览器缓存/cookies中。
    • 你能用gears.google.com之类的东西来存储你需要的信息吗?
    【解决方案3】:

    正如 Richard H 所提到的,如果用户知道在哪里查找,则 cookie 中的数据对用户是可见的。所以这里不是存储秘密的好地方。

    也就是说,我有一个不同的应用程序需要在客户端存储大量数据并遇到了同样的问题。 (在我的应用程序中,我需要使应用程序能够离线运行,并在 PC 崩溃或网站关闭时保持用户操作。)解决方案非常简单:

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

    2) 删除 cookie。这是一个可以清除 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且不删除的情况下发出请求
    • 我认为这不可能。据我所知,浏览器会将所有 cookie 附加到每个请求,即使它导致请求失败。如果你保存cookie数据,去掉cookie,然后再恢复,也是一样的效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2013-01-05
    • 2017-01-02
    • 2018-01-03
    • 2015-11-08
    • 1970-01-01
    相关资源
    最近更新 更多