我正在使用node/express服务器和angularjs作为前端。服务器设置了cookie,并在网络响应中正确显示。但cookie没有显示在chrome开发工具的资源选项卡中。出现这种情况的可能原因是什么?x1c 0d1x
gojuced71#
以下是实际上未设置有效Cookie的两个可能原因:1.无效的过期时间-从浏览器的Angular 来看,Cookie在过去的某个时间过期1.Cookie的无效域。假设您提供来自 example.com 的页面,但您的服务器尝试将Cookie设置为域 * google.com *chrome开发工具中也可能有一个bug,不显示您的cookie,但您可以通过向服务器发出另一个请求来轻松检查,并查看服务器实际接收到了哪些cookie。
ocebsuys2#
这可能是因为你的cookie是HTTPOnly认证cookie。除非你浏览本地主机,否则这些cookie不会显示在chrome中。
gg58donl3#
如果您确定cookie已经被设置并且正在被发送到服务器,但是您不能总是在开发者工具的cookies pane中看到它,* 请检查主机和路径是否都与浏览器中的当前URL匹配 *。有一个选项可能并不总是合适,那就是在cookie中显式设置Path=/,以匹配所有URL。
Path=/
当您在开发者控制台打开的情况下浏览您的站点时,Cookie窗格将仅显示与URL中的当前主机和路径匹配的Cookie。例如,如果您将Cookie设置为 * subdomain.example.com但当前位于 * example.com *,则 subdomain.example.com 的Cookie将不会显示。即使当前已设置。导航到 subdomain.example.com,您现在应该可以在控制台中看到它。同样,假设您在 example.com/api 的Node应用程序没有在cookie中设置Path,而是自动设置为Path=/api。只有当您浏览到以 example.com/api/ 开头的页面时,这才会在控制台上可见。您在同一页面中的JavaScript代码,向 example.com/api 发送请求时,自然会包含此cookie。即使它在控制台上不可见,因为URL中的路径不同。您可以在网站信息弹出窗口中看到所有cookie的域和路径。这通常是通过点击URL左侧的图标来完成的,例如,如果是HTTPS,则为挂锁。在cookie部分下,您可以看到一个类似于Opera下图的框,与其他浏览器类似。
Path
Path=/api
记下所选Cookie的路径和域。
在cookie中显式设置Path=/.根据Set-Cookie MDN documentation为Path=<path-value>:指示浏览器要发送Cookie标头所请求的URL中必须存在的路径。正斜杠(/)字符被解释为目录分隔符,并且子目录也被匹配。例如,对于Path=/docs,
Path=<path-value>
在上面的引用中隐含的意思是,使用Path=/将匹配给定域中的所有URL。在使用此方法之前,您应该确定它适合您特定用例中的所有场景。
3条答案
按热度按时间gojuced71#
以下是实际上未设置有效Cookie的两个可能原因:
1.无效的过期时间-从浏览器的Angular 来看,Cookie在过去的某个时间过期
1.Cookie的无效域。假设您提供来自 example.com 的页面,但您的服务器尝试将Cookie设置为域 * google.com *
chrome开发工具中也可能有一个bug,不显示您的cookie,但您可以通过向服务器发出另一个请求来轻松检查,并查看服务器实际接收到了哪些cookie。
ocebsuys2#
这可能是因为你的cookie是HTTPOnly认证cookie。除非你浏览本地主机,否则这些cookie不会显示在chrome中。
gg58donl3#
如果您确定cookie已经被设置并且正在被发送到服务器,但是您不能总是在开发者工具的cookies pane中看到它,* 请检查主机和路径是否都与浏览器中的当前URL匹配 *。有一个选项可能并不总是合适,那就是在cookie中显式设置
Path=/
,以匹配所有URL。详细信息
当您在开发者控制台打开的情况下浏览您的站点时,Cookie窗格将仅显示与URL中的当前主机和路径匹配的Cookie。例如,如果您将Cookie设置为 * subdomain.example.com但当前位于 * example.com *,则 subdomain.example.com 的Cookie将不会显示。即使当前已设置。导航到 subdomain.example.com,您现在应该可以在控制台中看到它。
同样,假设您在 example.com/api 的Node应用程序没有在cookie中设置
Path
,而是自动设置为Path=/api
。只有当您浏览到以 example.com/api/ 开头的页面时,这才会在控制台上可见。您在同一页面中的JavaScript代码,向 example.com/api 发送请求时,自然会包含此cookie。即使它在控制台上不可见,因为URL中的路径不同。您可以在网站信息弹出窗口中看到所有cookie的域和路径。这通常是通过点击URL左侧的图标来完成的,例如,如果是HTTPS,则为挂锁。在cookie部分下,您可以看到一个类似于Opera下图的框,与其他浏览器类似。
记下所选Cookie的路径和域。
潜在解决方案
在cookie中显式设置
Path=/
.根据Set-Cookie MDN documentation为Path=<path-value>
:指示浏览器要发送Cookie标头所请求的URL中必须存在的路径。
正斜杠(/)字符被解释为目录分隔符,并且子目录也被匹配。例如,对于Path=/docs,
在上面的引用中隐含的意思是,使用
Path=/
将匹配给定域中的所有URL。在使用此方法之前,您应该确定它适合您特定用例中的所有场景。