登录系统的 Set-Cookie
Posted
技术标签:
【中文标题】登录系统的 Set-Cookie【英文标题】:Set-Cookie for a login system 【发布时间】:2015-03-10 14:37:09 【问题描述】:我在设置 cookie 时遇到了一些问题,根据我所做的阅读,这应该可以工作,所以我可能遗漏了一些重要的东西。
这种情况:
之前我从我的 API 收到响应并使用 javascript 将它们保存为 cookie,但后来我发现在很多情况下使用 set-cookie 响应标头更安全。
我有 2 个 cookie:“nuser”(包含用户名)和密钥(包含会话密钥)。 nuser 不应该是 httpOnly 以便 JavaScript 可以访问它。密钥应该是 httpOnly 以防止恶意脚本窃取用户的会话。此外,客户端对我的 API 的任何请求都应包含 cookie。
登录请求
这是我当前的实现:我在 localhost:8080/login/login 向我的登录 api 发出请求(请记住,网络客户端托管在 localhost:80 上,但根据我读过的内容,端口数字对于 cookie 来说应该无关紧要)
首先,网络浏览器将发出一个 OPTIONS 请求以确认所有标头都被允许。我已确保服务器响应包含访问控制允许凭据,以提醒浏览器可以存储 cookie。
一旦收到 OPTIONS 请求,浏览器就会向登录 API 发出实际的 POST 请求。它发回 set-cookie 标头,此时一切看起来都很好。
问题 这种设置产生了两个问题。首先,虽然 nuser cookie 不是 httpOnly,但我似乎无法通过 JavaScript 访问它。我可以在浏览器的 cookie 选项菜单中看到 nuser,但 document.cookie 输出“”。
其次,浏览器似乎只将 Cookie 请求标头放在对完全相同的 API(登录 API)的请求中:
但是,如果我向仍在我的本地主机服务器上的不同 API 发出请求,则 cookie 标头不存在: 哦,这会返回 406,因为我的服务器当前配置为在未验证用户的情况下执行此操作。我知道这应该是 403,但在这张图片中要关注的是“cookie”标头不包含在请求标头中。
所以,我已经根据我目前对 cookie 的理解解释了我的实现,但我显然遗漏了一些东西。非常感谢准确发布每个任务的请求和响应标头应该是什么样子。谢谢。
【问题讨论】:
【参考方案1】:好的,仍然不完全是导致此特定案例问题的原因,但我更新了我的 localhost:80 服务器以接受 api 请求,然后向 localhost:8080 发出后续请求以获取正确的信息。因为 set-cookie 标头是由 localhost:80 (客户端的来源)设置的,所以一切正常。根据我之前的阅读,我认为端口无关紧要,但显然它们确实如此。
【讨论】:
以上是关于登录系统的 Set-Cookie的主要内容,如果未能解决你的问题,请参考以下文章