【问题标题】:How to manage cookies - with JavaScript or with HTTP Set-Cookie?如何管理 cookie - 使用 JavaScript 还是使用 HTTP Set-Cookie?
【发布时间】:2011-03-10 23:13:28
【问题描述】:
我正在 GAE 环境中创建一个 Web 应用程序。它大量使用 AJAX/JSON 来发送/接收数据等等。我不太担心禁用 JS 的浏览器和过时的浏览器,因为这是我的个人项目,我正在努力让它变得简单,而不是在代码中臃肿。所以,我在项目中大量使用 JavaScript。请告诉我在这种情况下如何更好地管理 cookie 和会话。我有两种变体 - 尽可能使用 HTTP Set-Cookie 和不使用 JavaScript。第二个是相反的——尽可能使用 JavaScript。两种变体现在都可以正常工作,但我想以正确的方式进行。在需要设置 cookie 的 JavaScript 场景中,我通过 AJAX 使用一些键获取一些数据,然后使用 jQuery 插件将这些键设置为 cookie,反之亦然,使用 JS 读取 cookie 并通过 AJAX 发送它们。两种方法的优缺点是什么?谢谢!
【问题讨论】:
标签:
javascript
python
cookies
【解决方案1】:
您应该在最方便的地方设置 Cookie。
这可能意味着一些 cookie 将来自服务器,一些来自客户端。
但是请注意,出于安全原因,高风险 cookie(例如登录令牌)应该是 HTTP-Only 的,这样它们就不能从 Javascript 访问。
(不用说它们应该是 SSL-only)
【解决方案2】:
Cookie 始终与 HTTP 标头捆绑在一起,因此在通过 JavaScript 读取并通过 AJAX 将它们发送到服务器方面没有“改进”。
例如,字体大小或网站语言等显示相关设置通常只与客户端相关,因此我只需使用 JavaScript 来设置和检索此类 cookie。
像会话 ID 这样的东西无论如何都需要服务器端的工作,因此通过 HTTP Set-Cookie 维护 cookie 似乎是最直接的方法。
【解决方案3】:
当您使用标头设置 cookie 时,您可以选择仅设置 HTTP(即无 javascript 访问)和 SSL - 仅。
启用这些选项可以避免应用程序中的许多安全漏洞(请注意,设置 http only 标志只会阻止 javascript 读取 cookie - 它仍会出现在 Ajax 请求中)。