如何管理 cookies - 使用 JavaScript 还是 HTTP Set-Cookie?
我正在GAE环境下创建一个网页应用,这个应用大量使用AJAX和JSON来发送和接收数据。我并不太担心那些禁用JavaScript的浏览器或者过时的浏览器,因为这是我个人的项目,我想让它简单一些,不想让代码变得臃肿。所以,我在项目中大量使用JavaScript。请给我一些建议,如何更好地管理cookies和会话。我有两个选择:一个是在可能的情况下使用HTTP的Set-Cookie,另一个是在不可能的情况下使用JavaScript。第二个选择正好相反,就是尽量使用JavaScript。现在这两种方法都能正常工作,但我想找到更正确的做法。在使用JavaScript的情况下,当需要设置cookie时,我会通过AJAX获取一些数据和键,然后用jQuery插件把这些键设置为cookies,反过来,通过JavaScript读取cookies并通过AJAX发送。请问这两种方法各有什么优缺点?谢谢!
3 个回答
当你通过头部设置 cookies 时,你可以选择设置 HTTP 仅限(也就是说,JavaScript 无法访问)和仅限 SSL。
开启这些选项可以避免你应用程序中的很多安全漏洞(需要注意的是,设置 HTTP 仅限标志只是防止 JavaScript 读取这个 cookie,但在 Ajax 请求中仍然会被发送)。
Cookies总是和HTTP头一起发送,所以用JavaScript读取它们并通过AJAX发送到服务器并没有什么“改进”。
比如,像字体大小或网站语言这样的显示设置通常只和用户的浏览器有关,所以我会直接用JavaScript来设置和获取这些cookies。
而像会话ID这样的东西,反正也需要服务器来处理,所以通过HTTP的Set-Cookie来维护cookie似乎是最简单的方法。
你可以在最方便的地方设置你的 cookies。
这可能意味着有些 cookies 是从服务器来的,有些则是从客户端来的。
不过要注意,出于安全考虑,高风险的 cookies(比如登录令牌)应该设置为 HTTP-Only,这样就不能通过 Javascript 访问了。
当然,它们也应该只通过 SSL 传输。