【问题标题】:Client only cookies - cookie which doesn't ever go to the server仅限客户端的 cookie - 永远不会发送到服务器的 cookie
【发布时间】:2012-06-20 09:41:30
【问题描述】:

我想将用户点击的数据存储在一个永远不必发送到服务器的 cookie 中。它就像一个会话添加的数据,我想在会话中持续存在,因为数据只是不断添加到 cookie 中,并且存储了很长时间,并且只有在用户删除浏览历史记录时才会被删除。 cookie 是纯客户端 cookie,它永远不必去服务器,因为我不需要服务器上的用户生成数据,所以我想摆脱 cookie 在之间来回发送时产生的额外开销浏览器和服务器。有没有可能做到这一点?

【问题讨论】:

  • 你能告诉我们你尝试过的代码吗?
  • 'localstorage' 被排除在外,因为我需要支持所有主要浏览器中的旧浏览器。马克——我已经实现了所有的功能,除了“纯客户端cookie”。我正在使用我在 quirksmode 上找到的代码创建具有适当名称 - 值对、到期日期和路径的 cookie。我可以使用 javascript 控制 cookie。只是我无法实现“仅限客户端的 cookie”部分。希望你有我的问题?
  • 马克 - 我可以提供代码,但它是每个人都使用过的普通代码块,包括 quirksmode 在内的许多网站都建议使用它。我只需要实现“仅限客户端的 cookie - 永远不会到达服务器的 cookie”。

标签: javascript jquery html cookies session-cookies


【解决方案1】:

我知道这对你来说有点晚了,但这个答案适用于所有有同样问题的人。

1) 借助 HTML5,您可以使用 [网络存储][1]。

2) (只是一个想法!- 未经测试!) 您可以定义一个 cookie(通过客户端上的 javascript)并设置“安全”属性。 在这种情况下,cookie 将仅通过 HTTPS 连接发送到服务器。 为确保 cookie 永远不会离开浏览器,您只需永远不要打开 HTTPS 连接 ;-)

【讨论】:

  • 我对 2) 有同样的想法,但它不起作用。您不能从 JS 访问安全 cookie(至少不能在 FF 中)。 1) 效果很好!
  • 哦,对了。我忘记了js访问权限。我也尝试为尚不支持网络存储的浏览器找到解决方案。您可以尝试将 cookie 路径值设置为不存在的路径。所以永远不应该发送cookie。 (不是testet。请尝试回答结果)
  • 如果您希望 cookie 在 IE 或 Edge 浏览器上运行,请不要使用 path=/notExistingPath
  • @amanteaux 我冒昧地删除了你所说的在 IE/Edge 中不起作用的答案中额外的“更新”部分——以防人们认为 11 个赞成票指的是那个部分答案。刚刚测试了最新的 Chrome,它也不能在那里工作。 Ma Jerez 有另一个专门针对这种方法的答案,因此可以在那里进一步讨论。
【解决方案2】:

如果浏览器兼容性是一个问题,您可以使用一些 javascript 来包装各种不同的技术。旧版本的 IE 支持(supprise supprise)一个名为 userData 的专有版本的 localstorage(我不认为它完全一样,但应该做你需要的)。

https://github.com/andris9/jStoragehttps://github.com/marcuswestin/store.js 这样的包装脚本应该可以满足您的需要。

【讨论】:

  • 非常感谢@Bulk,我会试一试。但就我个人而言,我更喜欢独立于浏览器的 cookie 解决方案,在这种情况下,我的失败案例将被减少到两个 - 浏览器对 cookie 的大小限制和禁用浏览器上的 cookie(用户数据/本地存储也可以类似地禁用和猜猜这个失败案例可以排除)。
  • 我不能肯定地说,我 99% 肯定没有基于“cookie”的解决方案,但请继续寻找 :)
【解决方案3】:

我 100% 确定没有办法强制 cookie 仅在客户端,它们总是发送到服务器。然而,也可以做相反的事情:通过在 cookie 上设置 HttpOnly 标志,仅服务器端的 cookie(javascript 无法读取)。

【讨论】:

    【解决方案4】:

    使用不可能的路径设置cookie:

    document.cookie = "cookieName=...; expires=... ; path=/never_reached/ablkappmqlnahsuia";
    

    【讨论】:

    • @amanteaux 对另一个答案的评论表明此方法在 IE 或 Edge 中不起作用;大概是因为 cookie 也无法从 javascript 中读取。
    • 其实刚刚签入Chromium,用不存在的路径设置路径会阻止cookie被设置。也许这是一个不再有效的 hack?
    猜你喜欢
    • 2018-08-27
    • 1970-01-01
    • 2019-04-23
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多